Network Working Group                                        M. MacFaden
Request for Comments: 3512                     Riverstone Networks, Inc.
Category: Informational                                       D. Partain
                                                                Ericsson
                                                              J. Saperia
                                                    JDS Consulting, Inc.
                                                            W. Tackabury
                                              Gold Wire Technology, Inc.
                                                              April 2003
        
Network Working Group                                        M. MacFaden
Request for Comments: 3512                     Riverstone Networks, Inc.
Category: Informational                                       D. Partain
                                                                Ericsson
                                                              J. Saperia
                                                    JDS Consulting, Inc.
                                                            W. Tackabury
                                              Gold Wire Technology, Inc.
                                                              April 2003
        

Configuring Networks and Devices with Simple Network Management Protocol (SNMP)

使用简单网络管理协议(SNMP)配置网络和设备

Status of this Memo

本备忘录的状况

This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited.

本备忘录为互联网社区提供信息。它没有规定任何类型的互联网标准。本备忘录的分发不受限制。

Copyright Notice

版权公告

Copyright (C) The Internet Society (2003). All Rights Reserved.

版权所有(C)互联网协会(2003年)。版权所有。

Abstract

摘要

This document is written for readers interested in the Internet Standard Management Framework and its protocol, the Simple Network Management Protocol (SNMP). In particular, it offers guidance in the effective use of SNMP for configuration management. This information is relevant to vendors that build network elements, management application developers, and those that acquire and deploy this technology in their networks.

本文档是为对Internet标准管理框架及其协议简单网络管理协议(SNMP)感兴趣的读者编写的。特别是,它提供了有效使用SNMP进行配置管理的指导。此信息与构建网络元素的供应商、管理应用程序开发人员以及在其网络中获取和部署此技术的人员相关。

Table of Contents

目录

   1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . .   3
      1.1. The Internet Standard Management Framework. . . . . . . .   3
      1.2. Configuration and the Internet Standard Management
           Frame-work. . . . . . . . . . . . . . . . . . . . . . . .   4
   2. Using SNMP as a Configuration Mechanism. . . . . . . . . . . .   5
      2.1. Transactions and SNMP . . . . . . . . . . . . . . . . . .   6
      2.2. Practical Requirements for Transactional Control. . . . .   6
      2.3. Practices in Configuration--Verification. . . . . . . . .   7
   3. Designing a MIB Module . . . . . . . . . . . . . . . . . . . .   9
      3.1. MIB Module Design - General Issues. . . . . . . . . . . .  10
      3.2. Naming MIB modules and Managed Objects. . . . . . . . . .  11
      3.3. Transaction Control And State Tracking. . . . . . . . . .  12
        
   1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . .   3
      1.1. The Internet Standard Management Framework. . . . . . . .   3
      1.2. Configuration and the Internet Standard Management
           Frame-work. . . . . . . . . . . . . . . . . . . . . . . .   4
   2. Using SNMP as a Configuration Mechanism. . . . . . . . . . . .   5
      2.1. Transactions and SNMP . . . . . . . . . . . . . . . . . .   6
      2.2. Practical Requirements for Transactional Control. . . . .   6
      2.3. Practices in Configuration--Verification. . . . . . . . .   7
   3. Designing a MIB Module . . . . . . . . . . . . . . . . . . . .   9
      3.1. MIB Module Design - General Issues. . . . . . . . . . . .  10
      3.2. Naming MIB modules and Managed Objects. . . . . . . . . .  11
      3.3. Transaction Control And State Tracking. . . . . . . . . .  12
        
           3.3.1. Conceptual Table Row Modification Practices. . . .  12
           3.3.2. Fate sharing with multiple tables. . . . . . . . .  13
           3.3.3. Transaction Control MIB Objects. . . . . . . . . .  14
           3.3.4. Creating And Activating New Table Rows . . . . . .  15
           3.3.5. Summary Objects and State Tracking . . . . . . . .  15
           3.3.6. Optimizing Configuration Data Transfer . . . . . .  18
      3.4. More Index Design Issues. . . . . . . . . . . . . . . . .  22
           3.4.1. Simple Integer Indexing. . . . . . . . . . . . . .  23
           3.4.2. Indexing with Network Addresses. . . . . . . . . .  23
      3.5. Conflicting Controls. . . . . . . . . . . . . . . . . . .  24
      3.6. Textual Convention Usage. . . . . . . . . . . . . . . . .  25
      3.7. Persistent Configuration. . . . . . . . . . . . . . . . .  26
      3.8. Configuration Sets and Activation . . . . . . . . . . . .  28
           3.8.1. Operational Activation Considerations. . . . . . .  28
           3.8.2. RowStatus and Deactivation . . . . . . . . . . . .  30
      3.9. SET Operation Latency . . . . . . . . . . . . . . . . . .  31
           3.9.1. Subsystem Latency, Persistence Latency,
                  and Activation Latency . . . . . . . . . . . . . .  33
      3.10. Notifications and Error Reporting. . . . . . . . . . . .  33
           3.10.1. Identifying Source of Configuration Changes . . .  34
           3.10.2. Limiting Unnecessary Transmission of
                   Notifications . . . . . . . . . . . . . . . . . .  34
           3.10.3. Control of Notification Subsystem . . . . . . . .  36
      3.11 Application Error Reporting . . . . . . . . . . . . . . .  36
      3.12 Designing MIB Modules for Multiple Managers . . . . . . .  37
      3.13 Other MIB Module Design Issues. . . . . . . . . . . . . .  39
           3.13.1. Octet String Aggregations . . . . . . . . . . . .  39
           3.13.2 Supporting multiple instances of a MIB Module. . .  40
           3.13.3 Use of Special Optional Clauses. . . . . . . . . .  41
   4. Implementing SNMP Configuration Agents . . . . . . . . . . . .  41
      4.1. Operational Consistency . . . . . . . . . . . . . . . . .  41
      4.2. Handling Multiple Managers. . . . . . . . . . . . . . . .  43
      4.3. Specifying Row Modifiability. . . . . . . . . . . . . . .  44
      4.4. Implementing Write-only Access Objects. . . . . . . . . .  44
   5. Designing Configuration Management Software. . . . . . . . . .  44
      5.1. Configuration Application Interactions
           with Managed Systems. . . . . . . . . . . . . . . . . . .  45
           5.1.1. SET Operations . . . . . . . . . . . . . . . . . .  46
           5.1.2. Configuration Transactions . . . . . . . . . . . .  46
           5.1.3. Tracking Configuration Changes . . . . . . . . . .  47
           5.1.4. Scalability of Data Retrieval. . . . . . . . . . .  48
   6. Deployment and Security Issues . . . . . . . . . . . . . . . .  48
      6.1. Basic assumptions about Configuration . . . . . . . . . .  48
      6.2. Secure Agent Considerations . . . . . . . . . . . . . . .  49
      6.3. Authentication Notifications. . . . . . . . . . . . . . .  49
      6.4. Sensitive Information Handling. . . . . . . . . . . . . .  50
   7. Policy-based Management. . . . . . . . . . . . . . . . . . . .  51
      7.1. What Is the Meaning of 'Policy-based' . . . . . . . . . .  51
        
           3.3.1. Conceptual Table Row Modification Practices. . . .  12
           3.3.2. Fate sharing with multiple tables. . . . . . . . .  13
           3.3.3. Transaction Control MIB Objects. . . . . . . . . .  14
           3.3.4. Creating And Activating New Table Rows . . . . . .  15
           3.3.5. Summary Objects and State Tracking . . . . . . . .  15
           3.3.6. Optimizing Configuration Data Transfer . . . . . .  18
      3.4. More Index Design Issues. . . . . . . . . . . . . . . . .  22
           3.4.1. Simple Integer Indexing. . . . . . . . . . . . . .  23
           3.4.2. Indexing with Network Addresses. . . . . . . . . .  23
      3.5. Conflicting Controls. . . . . . . . . . . . . . . . . . .  24
      3.6. Textual Convention Usage. . . . . . . . . . . . . . . . .  25
      3.7. Persistent Configuration. . . . . . . . . . . . . . . . .  26
      3.8. Configuration Sets and Activation . . . . . . . . . . . .  28
           3.8.1. Operational Activation Considerations. . . . . . .  28
           3.8.2. RowStatus and Deactivation . . . . . . . . . . . .  30
      3.9. SET Operation Latency . . . . . . . . . . . . . . . . . .  31
           3.9.1. Subsystem Latency, Persistence Latency,
                  and Activation Latency . . . . . . . . . . . . . .  33
      3.10. Notifications and Error Reporting. . . . . . . . . . . .  33
           3.10.1. Identifying Source of Configuration Changes . . .  34
           3.10.2. Limiting Unnecessary Transmission of
                   Notifications . . . . . . . . . . . . . . . . . .  34
           3.10.3. Control of Notification Subsystem . . . . . . . .  36
      3.11 Application Error Reporting . . . . . . . . . . . . . . .  36
      3.12 Designing MIB Modules for Multiple Managers . . . . . . .  37
      3.13 Other MIB Module Design Issues. . . . . . . . . . . . . .  39
           3.13.1. Octet String Aggregations . . . . . . . . . . . .  39
           3.13.2 Supporting multiple instances of a MIB Module. . .  40
           3.13.3 Use of Special Optional Clauses. . . . . . . . . .  41
   4. Implementing SNMP Configuration Agents . . . . . . . . . . . .  41
      4.1. Operational Consistency . . . . . . . . . . . . . . . . .  41
      4.2. Handling Multiple Managers. . . . . . . . . . . . . . . .  43
      4.3. Specifying Row Modifiability. . . . . . . . . . . . . . .  44
      4.4. Implementing Write-only Access Objects. . . . . . . . . .  44
   5. Designing Configuration Management Software. . . . . . . . . .  44
      5.1. Configuration Application Interactions
           with Managed Systems. . . . . . . . . . . . . . . . . . .  45
           5.1.1. SET Operations . . . . . . . . . . . . . . . . . .  46
           5.1.2. Configuration Transactions . . . . . . . . . . . .  46
           5.1.3. Tracking Configuration Changes . . . . . . . . . .  47
           5.1.4. Scalability of Data Retrieval. . . . . . . . . . .  48
   6. Deployment and Security Issues . . . . . . . . . . . . . . . .  48
      6.1. Basic assumptions about Configuration . . . . . . . . . .  48
      6.2. Secure Agent Considerations . . . . . . . . . . . . . . .  49
      6.3. Authentication Notifications. . . . . . . . . . . . . . .  49
      6.4. Sensitive Information Handling. . . . . . . . . . . . . .  50
   7. Policy-based Management. . . . . . . . . . . . . . . . . . . .  51
      7.1. What Is the Meaning of 'Policy-based' . . . . . . . . . .  51
        
      7.2. Organization of Data in an SNMP-Based Policy System . . .  53
      7.3. Information Related to Policy-based Configuration . . . .  54
      7.4. Schedule and Time Issues. . . . . . . . . . . . . . . . .  56
      7.5. Conflict Detection, Resolution and Error Reporting. . . .  56
           7.5.1. Changes to Configuration Outside of the
                  Policy System. . . . . . . . . . . . . . . . . . .  57
      7.6. More about Notifications in a Policy System . . . . . . .  57
      7.7. Using Policy to Move Less Configuration Data. . . . . . .  57
   8. Example MIB Module With Template-based Data. . . . . . . . . .  58
      8.1. MIB Module Definition. . . . . . . .  . . . . . . . . . .  61
      8.2. Notes on MIB Module with Template-based Data. . . . . . .  73
      8.3. Examples of Usage of the MIB . . . . . . .. . . . . . . .  74
   9. Security Considerations . . . . . . . . . . .. . . . . . . . .  77
   10. Acknowledgments. . . . . . . . . . . . . . .  . . . . . . . .  78
   11. Normative References. . . . . . . . . . . . . . . . . . . . .  78
   12. Informative References. . . . . . . . . . . . . . . . . . . .  79
   13. Intellectual Property . . . . . . . . . . . . . . . . . . . .  81
   14. Editors' Addresses. . . . . . . . . . . . . . . . . . . . . .  82
   15. Full Copyright Statement. . . . . . . . . . . . . . . . . . .  83
        
      7.2. Organization of Data in an SNMP-Based Policy System . . .  53
      7.3. Information Related to Policy-based Configuration . . . .  54
      7.4. Schedule and Time Issues. . . . . . . . . . . . . . . . .  56
      7.5. Conflict Detection, Resolution and Error Reporting. . . .  56
           7.5.1. Changes to Configuration Outside of the
                  Policy System. . . . . . . . . . . . . . . . . . .  57
      7.6. More about Notifications in a Policy System . . . . . . .  57
      7.7. Using Policy to Move Less Configuration Data. . . . . . .  57
   8. Example MIB Module With Template-based Data. . . . . . . . . .  58
      8.1. MIB Module Definition. . . . . . . .  . . . . . . . . . .  61
      8.2. Notes on MIB Module with Template-based Data. . . . . . .  73
      8.3. Examples of Usage of the MIB . . . . . . .. . . . . . . .  74
   9. Security Considerations . . . . . . . . . . .. . . . . . . . .  77
   10. Acknowledgments. . . . . . . . . . . . . . .  . . . . . . . .  78
   11. Normative References. . . . . . . . . . . . . . . . . . . . .  78
   12. Informative References. . . . . . . . . . . . . . . . . . . .  79
   13. Intellectual Property . . . . . . . . . . . . . . . . . . . .  81
   14. Editors' Addresses. . . . . . . . . . . . . . . . . . . . . .  82
   15. Full Copyright Statement. . . . . . . . . . . . . . . . . . .  83
        
1. Introduction
1. 介绍
1.1. The Internet Standard Management Framework
1.1. 因特网标准管理框架

The Internet Standard Management Framework has many components. The purpose of this document is to describe effective ways of applying those components to the problems of configuration management.

Internet标准管理框架有许多组件。本文档旨在描述将这些组件应用于配置管理问题的有效方法。

For reference purposes, the Internet Standard Management Framework presently consists of five major components:

为了便于参考,互联网标准管理框架目前由五个主要部分组成:

o An overall architecture, described in RFC 3411 [1].

o RFC 3411[1]中描述的总体架构。

o Mechanisms for describing and naming objects and events for the purpose of management. The first version of this Structure of Management Information (SMI) is called SMIv1 and described in STD 16, RFC 1155 [15], STD 16, RFC 1212 [16] and RFC 1215 [17]. The second version, called SMIv2, is described in STD 58, RFC 2578 [2], STD 58, RFC 2579 [3] and STD 58, RFC 2580 [4].

o 为管理目的描述和命名对象和事件的机制。这种管理信息结构(SMI)的第一个版本称为SMIv1,并在STD 16、RFC 1155[15]、STD 16、RFC 1212[16]和RFC 1215[17]中进行了描述。第二个版本称为SMIv2,在STD 58、RFC 2578[2]、STD 58、RFC 2579[3]和STD 58、RFC 2580[4]中进行了描述。

o Message protocols for transferring management information. The first version of the SNMP message protocol is called SNMPv1 and described in STD 15, RFC 1157 [18]. A second version of the SNMP message protocol, which is not an Internet standards track protocol, is called SNMPv2c and described in RFC 1901 [19]. The third version of the message protocol is called SNMPv3 and described in RFC 3417 [5], RFC 3412 [6] and RFC 3414 [7].

o 用于传输管理信息的消息协议。SNMP消息协议的第一个版本称为SNMPv1,在STD 15、RFC 1157[18]中进行了描述。SNMP消息协议的第二个版本不是Internet标准跟踪协议,称为SNMPv2c,并在RFC 1901[19]中描述。消息协议的第三个版本称为SNMPv3,在RFC 3417[5]、RFC 3412[6]和RFC 3414[7]中进行了描述。

o Protocol operations for accessing management information. The first set of protocol operations and associated PDU formats is described in STD 15, RFC 1157 [18]. A second set of protocol operations and associated PDU formats is described in RFC 3416 [8].

o 访问管理信息的协议操作。STD 15、RFC 1157[18]中描述了第一组协议操作和相关PDU格式。RFC 3416[8]中描述了第二组协议操作和相关PDU格式。

o A set of fundamental applications described in RFC 3413 [9] and the view-based access control mechanism described in RFC 3415 [10].

o RFC 3413[9]中描述的一组基本应用程序和RFC 3415[10]中描述的基于视图的访问控制机制。

A more detailed introduction to the current SNMP Management Framework can be found in RFC 3410 [12].

有关当前SNMP管理框架的更详细介绍,请参见RFC 3410[12]。

Managed objects are accessed via a virtual information store, termed the Management Information Base or MIB. Objects in the MIB are defined using the mechanisms defined in the SMI.

托管对象通过虚拟信息存储(称为管理信息库或MIB)进行访问。MIB中的对象是使用SMI中定义的机制定义的。

1.2. Configuration and the Internet Standard Management Framework
1.2. 配置和Internet标准管理框架

Data networks have grown significantly over the past decade. This growth can be seen in terms of:

数据网络在过去十年中有了显著增长。这种增长可以从以下几个方面看:

Scale - Networks have more network elements, and the network elements are larger and place more demands on the systems managing them. For example, consider a typical number and speed of interfaces in a modern core network element. A managed metropolitan area network switch can have a port density much greater than the port density built into the expectations of the management systems that predated it. There are also many more interrelationships within and between devices and device functions.

规模-网络有更多的网络元素,网络元素更大,对管理它们的系统提出了更高的要求。例如,考虑现代核心网络单元中接口的典型数量和速度。受管城域网交换机的端口密度可能远远大于之前的管理系统所期望的端口密度。在设备内部和设备与设备功能之间还有更多的相互关系。

Functionality - network devices perform more functions. More protocols and network layers are required for the successful deployment of network services which depend on them.

功能-网络设备执行更多功能。成功部署依赖于它们的网络服务需要更多的协议和网络层。

Rate of Change - the nature of modern network services causes updates, additions, and deletions of device configuration information more often than in the past. No longer can it be assumed that a configuration will be specified once and then be updated rarely. On the contrary, the trend has been towards much more frequent changes of configuration information.

变化率-现代网络服务的性质导致更新、添加和删除设备配置信息的频率比过去更高。不再可以假设配置只指定一次,然后很少更新。相反,配置信息的更改越来越频繁。

Correct configuration of network elements that make up data networks is a prerequisite to the successful deployment of the services on them. The growth in size and complexity of modern networks increases the need for a standard configuration mechanism that is tightly integrated with performance and fault management systems.

正确配置构成数据网络的网元是在其上成功部署服务的先决条件。现代网络规模和复杂性的增长增加了对与性能和故障管理系统紧密集成的标准配置机制的需求。

The Internet Standard Management Framework has been used successfully to develop configuration management systems for a broad range of devices and networks. A standard configuration mechanism that tightly integrates with performance and fault systems is needed not only to help reduce the complexity of management, but also to enable verification of configuration activities that create revenue-producing services.

Internet标准管理框架已成功用于为广泛的设备和网络开发配置管理系统。需要与性能和故障系统紧密集成的标准配置机制,这不仅有助于降低管理的复杂性,而且还可以验证创建创收服务的配置活动。

This document describes Current Practices that have been used when designing effective configuration management systems using the Internet Standard Management Framework (colloquially known as SNMP). It covers many basic practices as well as more complex agent and manager design issues that are raised by configuration management. We are not endeavoring to present a comprehensive how-to document for generalized SNMP agent, MIB module, or management application design and development. We will, however, cover points of generalized SNMP software design and implementation practice, where the practice has been seen to benefit configuration management software. So, for example, the requirement for management applications to be aware of agent limitations is discussed in the context of configuration operations, but many issues that a management application developer should consider with regard to manager-agent interactions are left for other documents and resources.

本文档描述了使用Internet标准管理框架(俗称SNMP)设计有效配置管理系统时使用的当前实践。它涵盖了许多基本实践以及配置管理提出的更复杂的代理和管理器设计问题。我们不打算为通用SNMP代理、MIB模块或管理应用程序的设计和开发提供全面的操作说明文档。然而,我们将讨论广义SNMP软件设计和实现实践的要点,在这些实践中,配置管理软件被认为是有益的。因此,例如,在配置操作的上下文中讨论对管理应用程序了解代理限制的要求,但是管理应用程序开发人员应该考虑到管理者-代理交互的许多问题留给其他文档和资源。

Significant experience has been gained over the past ten years in configuring public and private data networks with SNMP. During this time, networks have grown significantly as described above. A response to this explosive growth has been the development of policy-based configuration management. Policy-Based Configuration Management is a methodology wherein configuration information is derived from rules and network-wide objectives, and is distributed to potentially many network elements with the goal of achieving consistent network behavior throughout an administrative domain.

在过去十年中,在使用SNMP配置公共和私有数据网络方面积累了丰富的经验。在此期间,网络如上文所述显著增长。针对这种爆炸性增长,开发了基于策略的配置管理。基于策略的配置管理是一种方法,其中配置信息来自规则和网络范围的目标,并分布到潜在的许多网络元素,目的是在整个管理域中实现一致的网络行为。

This document presents lessons learned from these experiences and applies them to both conventional and policy-based configuration systems based on SNMP.

本文档介绍了从这些经验中吸取的经验教训,并将其应用于基于SNMP的传统配置系统和基于策略的配置系统。

2. Using SNMP as a Configuration Mechanism
2. 使用SNMP作为配置机制

Configuration activity causes one or more state changes in an element. While it often takes an arbitrary number of commands and amount of data to make up configuration change, it is critical that the configuration system treat the overall change operation atomically so that the number of states into which an element transitions is minimized. The goal is for a change request either to be completely executed or not at all. This is called transactional integrity. Transactional integrity makes it possible to develop

配置活动导致元素中的一个或多个状态更改。虽然通常需要任意数量的命令和数据来完成配置更改,但配置系统必须以原子方式处理整个更改操作,以使元素转换到的状态数最小化。目标是变更请求要么完全执行,要么根本不执行。这称为事务完整性。事务完整性使开发

reliable configuration systems that can invoke transactions and keep track of an element's overall state and work in the presence of error states.

可靠的配置系统,可以调用事务,跟踪元素的整体状态,并在出现错误状态时工作。

2.1. Transactions and SNMP
2.1. 事务和SNMP

Transactions can logically take place at very fine-grained levels such as an individual object instance or in very large aggregations that could include many object instances located in many tables on a managed device. For this reason, reliance on transactional integrity only at the SNMP protocol level is insufficient.

事务在逻辑上可以在非常细粒度的级别上发生,例如单个对象实例,或者在非常大的聚合中发生,这些聚合可能包括位于托管设备上许多表中的许多对象实例。因此,仅在SNMP协议级别依赖事务完整性是不够的。

2.2. Practical Requirements for Transactional Control
2.2. 事务控制的实际要求

A well-designed and deployed configuration system should have the following features with regard to transactions and transactional integrity.

一个设计良好、部署良好的配置系统在事务和事务完整性方面应该具有以下特性。

1) Provide for flexible transaction control at many different levels of granularity. At one extreme, an entire configuration may be delivered and installed on an element, or alternately one small attribute may be changed.

1) 在许多不同的粒度级别提供灵活的事务控制。在一个极端情况下,可以在一个元素上交付和安装整个配置,或者可以更改一个小属性。

2) The transaction control component should work at and understand a notion of the kind of multi-level "defaulting" as described in Section 7.1. The key point here is that it may make most sense to configure systems at an abstract level rather than on an individual instance by instance basis as has been commonly practiced. In some cases it is more effective to send a configuration command to a system that contains a set of 'defaults' to be applied to instances that meet certain criteria.

2) 事务控制组件应在第7.1节中描述的多级“默认”概念下工作并理解该概念。这里的关键点是,在抽象级别配置系统可能最有意义,而不是像通常所做的那样逐个实例地配置系统。在某些情况下,将配置命令发送到包含一组应用于满足特定条件的实例的“默认值”的系统更为有效。

3) An effective configuration management system must allow flexibility in the definition of a successful transaction. This cannot be done at the protocol level alone, but rather must be provided for throughout the application and the information that is being managed. In the case of SNMP, the information would be in properly defined MIB modules.

3) 有效的配置管理系统必须允许灵活定义成功的事务。这不能仅在协议级别完成,而必须在整个应用程序和正在管理的信息中提供。对于SNMP,信息将位于正确定义的MIB模块中。

4) A configuration management system should provide time-indexed transaction control. For effective rollback control, the configuration transactions and their successful or unsuccessful completion status must be reported by the managed elements and stored in a repository that supports such time indexing and can record the user that made the change, even if the change was not carried out by the system recording the change.

4) 配置管理系统应提供时间索引事务控制。为了进行有效的回滚控制,配置事务及其成功或不成功的完成状态必须由托管元素报告,并存储在支持此类时间索引的存储库中,并且可以记录做出更改的用户,即使更改不是由记录更改的系统执行的。

5) The managed system must support transactional security. This means that depending on who is making the configuration request and where it is being made, it may be accepted or denied based on security policy that is in effect in the managed element.

5) 托管系统必须支持事务安全性。这意味着,根据发出配置请求的人和发出配置请求的位置,可以根据托管元素中有效的安全策略接受或拒绝配置请求。

Effective transactional control is a responsibility shared between design, implementation, and operational practice. Transaction control techniques for MIB module design are discussed in Section 3.3. Transaction control considerations for the agent implementation are discussed in Section 5.2.2.

有效的事务控制是设计、实现和操作实践之间共同承担的责任。第3.3节讨论了MIB模块设计的事务控制技术。第5.2.2节讨论了代理实现的事务控制注意事项。

2.3. Practices in Configuration--Verification
2.3. 配置实践——验证

Verification of expected behavior subsequent to the commitment of change is an integral part of the configuration process. To reduce the chance of making simple errors in configuration, many organizations employ the following change management procedure:

确认变更承诺后的预期行为是配置过程的一个组成部分。为了减少在配置中发生简单错误的可能性,许多组织采用以下变更管理程序:

pre-test - verify that the system is presently working properly

预测试-验证系统当前是否正常工作

change - make configuration changes and wait for convergence (system or network stability)

更改-进行配置更改并等待收敛(系统或网络稳定性)

re-test - verify once again that the system is working properly

重新测试-再次验证系统是否正常工作

This procedure is commonly used to verify configuration changes to critical systems such as the domain name system (DNS). DNS software kits provide diagnostic tools that allow automatic test procedures/scripts to be conducted.

此过程通常用于验证对关键系统(如域名系统(DNS))的配置更改。DNS软件包提供诊断工具,允许执行自动测试程序/脚本。

A planned configuration sequence can be aborted if the pre-configuration test result shows the state of the system as unstable. Debugging the unintended effects of two sets of changes in large systems is often more challenging than an analysis of the effects of a single set after test termination.

如果预配置测试结果显示系统状态不稳定,则可以中止计划的配置序列。调试大型系统中两组更改的意外影响通常比分析测试终止后单个更改的影响更具挑战性。

Networks and devices under SNMP configuration readily support this change management procedure since the SNMP provides integrated monitoring, configuration and diagnostic capabilities. The key is the sequencing of SNMP protocol operations to effect an integrated change procedure like the one described above. This is usually a well-bounded affair for changes within a single network element or node. However, there are times when configuration of a given element can impact other elements in a network. Configuring network protocols such as IEEE 802.1D Spanning Tree or OSPF is especially challenging since the impact of a configuration change can directly affect stability (convergence) of the network the device is connected to.

SNMP配置下的网络和设备很容易支持此更改管理过程,因为SNMP提供了集成的监视、配置和诊断功能。关键是SNMP协议操作的顺序,以实现如上所述的集成更改过程。对于单个网络元素或节点内的更改,这通常是一个有良好边界的事件。然而,有时给定元素的配置可能会影响网络中的其他元素。配置IEEE 802.1D生成树或OSPF等网络协议尤其具有挑战性,因为配置更改的影响会直接影响设备所连接网络的稳定性(收敛性)。

An integrated view of configuration and monitoring provides an ideal platform from which to evaluate such changes. For example, the MIB module governing IEEE 802.1D Spanning Tree (RFC 1493 [24]) provides the following object to monitor stability per logical bridge.

配置和监视的集成视图提供了一个评估此类更改的理想平台。例如,管理IEEE 802.1D生成树(RFC 1493[24])的MIB模块提供以下对象来监控每个逻辑桥的稳定性。

      dot1dStpTopChanges OBJECT-TYPE
          SYNTAX  Counter
          ACCESS  read-only
          STATUS  mandatory
          DESCRIPTION
             "The total number of topology changes detected by
             this bridge since the management entity was last
             reset or initialized."
          REFERENCE
             "IEEE 802.1D-1990: Section 6.8.1.1.3"
          ::= { dot1dStp 4 }
        
      dot1dStpTopChanges OBJECT-TYPE
          SYNTAX  Counter
          ACCESS  read-only
          STATUS  mandatory
          DESCRIPTION
             "The total number of topology changes detected by
             this bridge since the management entity was last
             reset or initialized."
          REFERENCE
             "IEEE 802.1D-1990: Section 6.8.1.1.3"
          ::= { dot1dStp 4 }
        

Likewise, the OSPF MIB module provides a similar metric for stability per OSPF area.

同样,OSPF MIB模块为每个OSPF区域提供了类似的稳定性指标。

      ospfSpfRuns OBJECT-TYPE
          SYNTAX   Counter32
          MAX-ACCESS   read-only
          STATUS   current
          DESCRIPTION
             "The number of times that the intra-area route
             table has been calculated using this area's
             link-state database.  This is typically done
             using Dijkstra's algorithm."
         ::= { ospfAreaEntry 4 }
        
      ospfSpfRuns OBJECT-TYPE
          SYNTAX   Counter32
          MAX-ACCESS   read-only
          STATUS   current
          DESCRIPTION
             "The number of times that the intra-area route
             table has been calculated using this area's
             link-state database.  This is typically done
             using Dijkstra's algorithm."
         ::= { ospfAreaEntry 4 }
        

The above object types are good examples of a means of facilitating the principles described in Section 2.3. That is, one needs to understand the behavior of a subsystem before configuration change, then be able to use the same means to retest and verify proper operation subsequent to configuration change.

上述对象类型是促进第2.3节所述原则的方法的良好示例。也就是说,在配置更改之前,需要了解子系统的行为,然后能够使用相同的方法重新测试和验证配置更改之后的正确操作。

The operational effects of a given implementation often differ from one to another for any given standard configuration object. The impact of a change to stability of systems such as OSPF should be documented in an agent-capabilities statement which is consistent with "Requirements for IP Version 4 Routers" [22], Section 1.3.4:

对于任何给定的标准配置对象,给定实现的操作效果往往各不相同。变更对OSPF等系统稳定性的影响应记录在代理能力声明中,该声明符合“IP版本4路由器的要求”[22],第1.3.4节:

A vendor needs to provide adequate documentation on all configuration parameters, their limits and effects.

供应商需要提供有关所有配置参数及其限制和影响的充分文件。

Adherence to the above model is not fail-safe, especially when configuration errors are masked by long latencies or when configuration errors lead to oscillations in network stability. For example, consider the situation of loading a new software version on a device, which leads to small, slow, cumulative memory leaks brought on by a certain traffic pattern that was not caught during vendor and customer test lab trials.

遵守上述模型不是故障安全的,特别是当配置错误被长延迟掩盖时,或者当配置错误导致网络稳定性波动时。例如,考虑在设备上加载新软件版本的情况,这会导致在某些供应商和客户测试实验室中没有被捕获的特定流量模式带来的小的、缓慢的、累积的内存泄漏。

In a network-based example, convergence in an autonomous system cannot be guaranteed when configuration changes are made since there are factors beyond the control of the operator, such as the state of other network elements. Problems affecting this convergence may not be detected for a significant period of time after the configuration change. Even for factors within the operator's control, there is often little verification done to prevent mis-configuration (as shown in the following example).

在基于网络的示例中,当进行配置更改时,无法保证自治系统中的收敛,因为存在超出操作员控制的因素,例如其他网络元件的状态。在配置更改后的很长一段时间内,可能无法检测到影响此收敛的问题。即使对于操作员控制范围内的因素,通常也很少进行验证以防止错误配置(如以下示例所示)。

Consider a change made to ospfIfHelloInterval and ospfIfRtrDeadInterval [24] timers in the OSPF routing protocol such that both are set to the same value. Two routers may form an adjacency but then begin to cycle in and out of adjacency, and thus never reach a stable (converged) state. Had the configuration process described at the beginning of this section been employed, this particular situation would have been discovered without impacting the production network.

考虑在OSPF路由协议中对OSPFIFHELLATION和OSPFIFRTRATESTATION(24)定时器作出的更改,使得两者都设置为相同的值。两个路由器可能形成邻接,但随后开始循环进出邻接,因此永远不会达到稳定(聚合)状态。如果采用本节开头所述的配置过程,则可以在不影响生产网络的情况下发现这种特殊情况。

The important point to remember from this discussion is that configuration systems should be designed and implemented with verification tests in mind.

从这个讨论中需要记住的一点是,配置系统的设计和实现应该考虑验证测试。

3. Designing a MIB Module
3. MIB模块的设计

Carefully considered MIB module designs are crucial to practical configuration with SNMP. As we have just seen, MIB objects designed for configuration can be very effective since they can be associated with integrated diagnostic, monitoring, and fault objects. MIB modules for configuration also scale when they expose their notion of template object types. Template objects can represent information at a higher level of abstraction than instance-level ones. This has the benefit of reducing the amount of instance-level data to move from management application to the agent on the managed element, when that instance-level data is brought about by applying a template object on the agent. Taken together, all of these objects can provide a robust configuration subsystem.

仔细考虑MIB模块设计对于SNMP的实际配置至关重要。正如我们刚才看到的,为配置而设计的MIB对象可能非常有效,因为它们可以与集成的诊断、监视和故障对象相关联。用于配置的MIB模块在公开其模板对象类型的概念时也会进行扩展。模板对象可以在比实例级对象更高的抽象级别上表示信息。这样做的好处是,当实例级数据是通过在代理上应用模板对象实现的时,可以减少从管理应用程序移动到托管元素上代理的实例级数据量。总之,所有这些对象都可以提供一个健壮的配置子系统。

The remainder of this section provides specific practices used in MIB module design with SMIv2 and SNMPv3.

本节的其余部分提供了使用SMIv2和SNMPv3进行MIB模块设计时使用的具体实践。

3.1. MIB Module Design - General Issues
3.1. MIB模块设计-一般问题

One of the first tasks in defining a MIB module is the creation of a model that reflects the scope and organization of the management information an agent will expose.

定义MIB模块的首要任务之一是创建一个模型,该模型反映代理将公开的管理信息的范围和组织。

MIB modules can be thought of as logical models providing one or more aspects/views of a subsystem. The objective for all MIB modules should be to serve one or more operational requirements such as accounting information collection, configuration of one or more parts of a system, or fault identification. However, it is important to include only those aspects of a subsystem that are proven to be operationally useful.

MIB模块可以被认为是提供子系统的一个或多个方面/视图的逻辑模型。所有MIB模块的目标应是满足一个或多个操作要求,如会计信息收集、系统一个或多个部分的配置或故障识别。然而,重要的是只包括子系统中那些被证明在操作上有用的方面。

In 1993, one of most widely deployed MIB modules supporting configuration was published, RFC 1493, which contained the BRIDGE-MIB. It defined the criteria used to develop the MIB module as follows:

1993年,发布了支持配置的部署最广泛的MIB模块之一RFC 1493,其中包含桥接MIB。它定义了用于开发MIB模块的标准,如下所示:

To be consistent with IAB directives and good engineering practice, an explicit attempt was made to keep this MIB as simple as possible. This was accomplished by applying the following criteria to objects proposed for inclusion:

为了与IAB指令和良好工程实践保持一致,明确尝试使该MIB尽可能简单。这是通过对拟纳入的对象应用以下标准来实现的:

(1) Start with a small set of essential objects and add only as further objects are needed.

(1) 从一小组基本对象开始,仅在需要其他对象时添加。

(2) Require objects be essential for either fault or configuration management.

(2) 要求对象对于故障管理或配置管理至关重要。

(3) Consider evidence of current use and/or utility.

(3) 考虑当前使用和/或实用工具的证据。

(4) Limit the total (sic) of objects.

(4) 限制对象的总数(sic)。

(5) Exclude objects which are simply derivable from others in this or other MIBs.

(5) 排除在此MIB或其他MIB中可从其他MIB派生的对象。

(6) Avoid causing critical sections to be heavily instrumented. The guideline that was followed is one counter per critical section per layer.

(6) 避免对关键部分进行大量检测。遵循的准则是每层每临界截面一个计数器。

Over the past eight years additional experience has shown a need to expand these criteria as follows:

在过去八年中,额外的经验表明有必要将这些标准扩展如下:

(7) Before designing a MIB module, identify goals and objectives for the MIB module. How much of the underlying system will be exposed depends on these goals.

(7) 在设计MIB模块之前,请确定MIB模块的目标。底层系统的暴露程度取决于这些目标。

(8) Minimizing the total number of objects is not an explicit goal, but usability is. Be sure to consider deployment and usability requirements.

(8) 最小化对象总数不是一个明确的目标,但可用性是。一定要考虑部署和可用性要求。

(9) During configuration, consider supporting explicit error state, capability and capacity objects.

(9) 在配置过程中,考虑支持显式错误状态、能力和容量对象。

(10) When evaluating rule (5) above, consider the impact on a management application. If an object can help reduce a management application's complexity, consider defining objects that can be derived.

(10)当评估上述规则(5)时,考虑对管理应用程序的影响。如果对象可以帮助减少管理应用程序的复杂性,请考虑定义可以导出的对象。

3.2. Naming MIB modules and Managed Objects
3.2. 命名MIB模块和托管对象

Naming of MIB modules and objects informally follows a set of best practices. Originally, standards track MIB modules used RFC names. As the MIB modules evolved, the practice changed to using more descriptive names. Presently, Standards Track MIB modules define a given area of technology such as ATM-MIB, and vendors then extend such MIB modules by prefixing the company name to a given MIB module as in ACME-ATM-MIB.

MIB模块和对象的命名非正式地遵循一组最佳实践。最初,标准跟踪使用RFC名称的MIB模块。随着MIB模块的发展,实践改变为使用更多描述性名称。目前,标准跟踪MIB模块定义了一个给定的技术领域,如ATM-MIB,然后供应商通过在ACME-ATM-MIB中为给定的MIB模块前缀公司名称来扩展此类MIB模块。

Object descriptors (the "human readable names" assigned to object identifiers [2]) defined in standard MIB modules should be unique across all MIB modules. Generally, a prefix is added to each managed object that can help reference the MIB module it was defined in. For example, the IF-MIB uses "if" prefix for descriptors of object types such as ifTable, ifStackTable and so forth.

在标准MIB模块中定义的对象描述符(分配给对象标识符的“人类可读名称”[2])在所有MIB模块中应该是唯一的。通常,每个托管对象都会添加一个前缀,以帮助引用在其中定义的MIB模块。例如,IF-MIB使用“IF”前缀作为对象类型的描述符,如ifTable、ifStackTable等。

MIB module object type descriptors can include an abbreviation for the function they perform. For example the objects that control configuration in the example MIB module in Section 8 include "Cfg" as part of the object descriptor, as in bldgHVACCfgDesiredTemp.

MIB模块对象类型描述符可以包含它们执行的功能的缩写。例如,第8节中示例MIB模块中控制配置的对象包括“Cfg”作为对象描述符的一部分,如bldgHVACCfgDesiredTemp。

This is more fully realized when the object descriptors that include the fault, configuration, accounting, performance and security [33] abbreviations are combined with an organized OID assignment approach. For example, a vendor could create a configuration branch in their private enterprises area. In some cases this might be best done on a per product basis. Whatever the approach used, "Cfg" might be included in every object descriptor in the configuration branch. This has two operational benefits. First, for those that do look at instances of MIB objects, descriptors as seen through MIB browsers or other command line tools assist in conveying the meaning of the object type. Secondly, management applications can be pointed at specific subtrees for fault or configuration, causing a more efficient retrieval of data and a simpler management application with potentially better performance.

当对象描述符(包括故障、配置、记帐、性能和安全[33]缩写)与有组织的OID分配方法相结合时,这一点会更充分地实现。例如,供应商可以在其私有企业区域中创建配置分支。在某些情况下,这可能最好按产品进行。无论使用何种方法,“Cfg”可能包含在配置分支中的每个对象描述符中。这在操作上有两个好处。首先,对于那些查看MIB对象实例的人,通过MIB浏览器或其他命令行工具看到的描述符有助于传达对象类型的含义。其次,可以将管理应用程序指向故障或配置的特定子树,从而实现更高效的数据检索和更简单的管理应用程序,并具有可能更好的性能。

3.3. Transaction Control And State Tracking
3.3. 事务控制和状态跟踪

Transactions and keeping track of their state is an important consideration when performing any type of configuration activity regardless of the protocol. Here are a few areas to consider when designing transaction support into an SNMP-based configuration system.

无论协议如何,在执行任何类型的配置活动时,事务和跟踪其状态都是一个重要的考虑因素。以下是当将事务支持设计到基于SNMP的配置系统时需要考虑的几个方面。

3.3.1. Conceptual Table Row Modification Practices
3.3.1. 概念表行修改实践

Any discussion of transaction control as it pertains to MIB module design often begins with how the creation or modification of object instances in a conceptual row in the MIB module is controlled.

有关MIB模块设计的事务控制的任何讨论通常从如何控制MIB模块中概念行中对象实例的创建或修改开始。

RowStatus [3] is a standard textual convention for the management of conceptual rows in a table. Specifically, the RowStatus textual convention that is used for the SYNTAX value of a single column in a table controls the creation, deletion, activation, and deactivation of conceptual rows of the table. When a table has been defined with a RowStatus object as one of its columns, changing an instance of the object to 'active' causes the row in which that object instance appears to become 'committed'.

RowStatus[3]是管理表中概念行的标准文本约定。具体而言,用于表中单个列的语法值的RowStatus文本约定控制表概念行的创建、删除、激活和停用。当一个表定义了RowStatus对象作为其列之一时,将该对象的实例更改为“活动”会导致该对象实例所在的行显示为“已提交”。

In a multi-table scenario where the configuration data must be spread over many columnar objects, a RowStatus object in one table can be used to cause the entire set of data to be put in operation or stored based on the definition of the objects.

在多表场景中,配置数据必须分布在多个列对象上,可以使用一个表中的RowStatus对象根据对象的定义使整个数据集投入运行或存储。

In some cases, very large amounts of data may need to be 'committed' all at once. In these cases, another approach is to configure all of the rows in all the tables required and have an "activate" object that has a set method that commits all the modified rows.

在某些情况下,可能需要一次性“提交”大量数据。在这些情况下,另一种方法是配置所有所需表中的所有行,并拥有一个“activate”对象,该对象具有提交所有修改行的set方法。

The RowStatus textual convention specifies that, when used in a conceptual row, a description must define what can be modified. While the description of the conceptual row and its columnar object types is the correct place to derive this information on instance modifiability, it is often wrongly assumed in some implementations that:

RowStatus文本约定指定,当在概念行中使用时,描述必须定义可以修改的内容。虽然概念行及其列对象类型的描述是获取实例可修改性信息的正确位置,但在某些实现中,通常错误地认为:

1) objects either must all be presently set or none need be set to make a conceptual RowStatus object transition to active(1)

1) 要将概念上的RowStatus对象转换为active(1),对象当前必须全部设置或不需要设置

2) objects in a conceptual row cannot be modified once a RowStatus object is active(1). Restricting instance modifiability like this, so that after a RowStatus object is set to active(1) is in fact a reasonable limitation, since such a set of RowStatus may have agent system side-effects which depend on committed columnar

2) 一旦RowStatus对象处于活动状态,则无法修改概念行中的对象(1)。像这样限制实例的可修改性,以便在RowStatus对象设置为active(1)之后,实际上是一个合理的限制,因为这样一组RowStatus可能会产生代理系统副作用,这取决于提交的columnar

object instance values. However, where this restriction exists on an object, it should be made clear in a DESCRIPTION clause such as the following:

对象实例值。但是,如果对象上存在此限制,则应在描述条款中予以明确,例如:

protocolDirDescr OBJECT-TYPE SYNTAX DisplayString (SIZE (1..64)) MAX-ACCESS read-create STATUS current DESCRIPTION "A textual description of the protocol encapsulation. A probe may choose to describe only a subset of the entire encapsulation (e.g., only the highest layer).

protocolDirDescr对象类型语法DisplayString(大小(1..64))MAX-ACCESS read create STATUS current DESCRIPTION“协议封装的文本描述。探测器可以选择仅描述整个封装的子集(例如,仅最高层)。

This object is intended for human consumption only.

此物品仅供人类使用。

            This object may not be modified if the associated
            protocolDirStatus object is equal to active(1)."
        ::= { protocolDirEntry 4 }
        
            This object may not be modified if the associated
            protocolDirStatus object is equal to active(1)."
        ::= { protocolDirEntry 4 }
        

Any such restrictions on columnar object instance modification while a row's RowStatus object instance is set to active(1) should appear in the DESCRIPTION clause of the RowStatus columnar OBJECT-TYPE as well.

当行的RowStatus对象实例设置为active(1)时,对列对象实例修改的任何此类限制也应出现在RowStatus列对象类型的DESCRIPTION子句中。

3.3.2. Fate sharing with multiple tables
3.3.2. 多表命运共享

An important principle associated with transaction control is fate sharing of rows in different tables. Consider the case where a relationship has been specified between two conceptual tables of a MIB module (or tables in two different MIB modules). In this context, fate sharing means that when a row of a table is deleted, the corresponding row in the other table is also deleted. Fate sharing in a transaction control context can also be used with the activation of very large configuration changes. If we have two tables that hold a set of configuration information, a row in one table might have to be put in the 'ready' state before the second can be put in the 'ready' state. When that second table can be placed in the 'ready' state, then the entire transaction can be considered to have been 'committed'.

与事务控制相关的一个重要原则是不同表中行的命运共享。考虑MIB模块的两个概念表之间的关系(或者在两个不同MIB模块中的表)之间的关系。在此上下文中,命运共享意味着当删除表中的一行时,另一个表中的对应行也会被删除。事务控制上下文中的命运共享也可用于激活非常大的配置更改。如果有两个表包含一组配置信息,那么一个表中的一行可能必须先处于“就绪”状态,然后第二个表才能处于“就绪”状态。当第二个表可以置于“就绪”状态时,整个事务可以被视为已“提交”。

Fate sharing of SNMP table data should be explicitly defined where possible using the SMI index qualifier AUGMENTS. If the relationship between tables cannot be defined using SMIv2 macros, then the DESCRIPTION clause of the object types which particularly effect the cross-table relationship should define what should happen when rows in related tables are added or deleted.

SNMP表数据的命运共享应尽可能使用SMI索引限定符明确定义。如果不能使用SMIv2宏定义表之间的关系,那么特别影响跨表关系的对象类型的DESCRIPTION子句应该定义在添加或删除相关表中的行时应该发生什么。

Consider the relationship between the dot1dBasePortTable and the ifTable. These tables have a sparse relationship. If a given ifEntry supports 802.1D bridging then there is a dot1dBasePortEntry that has a pointer to it via dot1dBasePortIfIndex.

考虑dot1dBasePosiTabe和IFTIT之间的关系。这些表具有稀疏关系。如果给定的ifEntry支持802.1D桥接,则存在一个dot1dBasePortEntry,它有一个通过dot1dBasePortIfIndex指向它的指针。

Now, what should happen if an ifEntry that can bridge is deleted? Should the object dot1dBasePortIfIndex simply be set to 0 or should the dot1dBasePortEntry be deleted as well? A number of acceptable design and practice techniques can provide the answer to these questions, so it is important for the MIB module designer to provide the guidance to guarantee consistency and interoperability.

现在,如果删除了一个可以桥接的ifEntry,该怎么办?对象dot1dBasePortIfIndex应该简单地设置为0,还是应该同时删除dot1dBasePortEntry?许多可接受的设计和实践技术可以为这些问题提供答案,因此MIB模块设计者提供指导以保证一致性和互操作性是很重要的。

To this end, when two tables are related in such a way, ambiguities such as this should be avoided by having the DESCRIPTION clauses of the pertinent row object types define the fate sharing of entries in the respective tables.

为此,当两个表以这种方式关联时,应该通过让相关行对象类型的描述子句定义各自表中条目的命运共享来避免此类歧义。

3.3.3. Transaction Control MIB Objects
3.3.3. 事务控制MIB对象

When a MIB module is defined that includes configuration object types, consider providing transaction control objects. These objects can be used to cause a large transaction to be committed. For example, we might have several tables that define the configuration of a portion of a system. In order to avoid churn in the operational state of the system we might create a single scalar object that, when set to a particular value, will cause the activation of the rows in all the necessary tables. Here are some examples of further usage for such object types:

当定义包含配置对象类型的MIB模块时,考虑提供事务控制对象。这些对象可用于提交大型事务。例如,我们可能有几个表来定义系统某一部分的配置。为了避免系统运行状态中的混乱,我们可以创建一个标量对象,当设置为特定值时,将激活所有必要表中的行。以下是进一步使用此类对象类型的一些示例:

o Control objects that are the 'write' or 'commit' objects.

o 控制作为“写入”或“提交”对象的对象。

Such objects can cause all pending transactions (change MIB object values as a result of SET operations) to be committed to a permanent repository or operational memory, as defined by the semantics of the MIB objects.

此类对象可导致所有挂起的事务(由于集合操作而更改MIB对象值)提交到永久存储库或操作内存,如MIB对象的语义所定义。

o Control objects at different levels of configuration granularity.

o 控制不同配置粒度级别的对象。

One of the decisions for a MIB module designer is what are the levels of granularity that make sense in practice. For example, in the routing area, would changes be allowed on a per protocol basis such as BGP? If allowed at the BGP level, are sub-levels permitted such as per autonomous system? The design of these control objects will be impacted by the underlying software design. RowStatus (see Section 3.3.1) also has important relevance as a general transaction control object.

MIB模块设计人员的决策之一是在实践中有意义的粒度级别。例如,在路由区域中,是否允许基于每个协议(如BGP)进行更改?如果BGP级别允许,是否允许子级别,例如每个自治系统?这些控制对象的设计将受到底层软件设计的影响。RowStatus(参见第3.3.1节)作为一般事务控制对象也具有重要的相关性。

3.3.4. Creating And Activating New Table Rows
3.3.4. 创建和激活新表行

When designing read-create objects in a table, a MIB module designer should first consider the default state of each object in the table when a row is created. Should an implementation of a standard MIB module vary in terms of the objects that need to be set in order to create an instance of a given row, an agent capabilities statement should be used to name the additional objects in that table using the CREATION-REQUIRES clause.

当在表中设计Read Read对象时,MIB模块设计器应首先考虑创建行时表中每个对象的默认状态。如果标准MIB模块的实现在创建给定行的实例时需要设置的对象方面有所不同,则应使用代理功能语句使用CREATION-REQUIRES子句命名该表中的其他对象。

It is useful when configuring new rows to use the notReady status to indicate row activation cannot proceed.

将新行配置为使用notReady状态来指示行激活无法继续时,此选项非常有用。

When creating a row instance of a conceptual table, one should consider the state of instances of required columnar objects in the row. The DESCRIPTION clause of such a required columnar object should specify it as such.

在创建概念表的行实例时,应考虑行中所需的列对象的实例状态。这样一个必需的列对象的DESCRIPTION子句应该这样指定它。

During the period of time when a management application is attempting to create a row, there may be a period of time when not all of these required (and non-defaultable) columnar object instances have been set. Throughout this time, an agent should return a noSuchInstance error for a GET of any object instance of the row until such time that all of these required instance values are set. The exception is the RowStatus object instance, for which a notReady(3) value should be returned during this period.

在管理应用程序尝试创建行的时间段内,可能有一段时间未设置所有这些必需(且不可默认)的列对象实例。在这段时间内,代理应该为该行的任何对象实例的GET返回noSuchInstance错误,直到设置了所有这些必需的实例值。RowStatus对象实例是一个例外,在此期间应为其返回notReady(3)值。

One need only be concerned with the notReady value return for a RowStatus object when the row under creation does not yet have all of the required, non-defaultable instance values for the row. One approach to simplifying in-row configuration transactions when designing MIB modules is to construct table rows that have no more instance data for columnar objects than will fit inside a single SET PDU. In this case, the createAndWait() value for the RowStatus columnar object is not required. It is possible to use createAndGo() in the same SET PDU, thus simplifying transactional management.

当正在创建的行尚未具有该行所需的所有非默认实例值时,只需关注RowStatus对象的notReady值返回。在设计MIB模块时,简化行内配置事务的一种方法是构造表行,这些表行中的列对象实例数据不超过单个集合PDU中的实例数据。在这种情况下,不需要RowStatus列对象的createAndWait()值。可以在同一组PDU中使用createAndGo(),从而简化事务管理。

3.3.5. Summary Objects and State Tracking
3.3.5. 摘要对象和状态跟踪

Before beginning a new set of configuration transactions, a management application might want to checkpoint the state of the managed devices whose configuration it is about to change. There are a number of techniques that a MIB module designer can provide to assist in the (re-)synchronization of the managed systems. These objects can also be used to verify that the management application's notion of the managed system state is the same as that of the managed device.

在开始一组新的配置事务之前,管理应用程序可能希望检查即将更改其配置的受管设备的状态。MIB模块设计者可以提供许多技术来帮助管理系统的(重新)同步。这些对象还可用于验证管理应用程序对受管系统状态的概念是否与受管设备的概念相同。

These techniques include:

这些技术包括:

1. Provide an object that reports the number of rows in a table

1. 提供一个报告表中行数的对象

2. Provide an object that flags when data in the table was last modified.

2. 提供一个对象,用于标记上次修改表中数据的时间。

3. Send a notification message (InformRequests are preferable) to deliver configuration change.

3. 发送通知消息(最好是InformRequests)以交付配置更改。

By providing an object containing the number of rows in a table, management applications can decide how best to retrieve a given table's data and may choose different retrieval strategies depending on table size. Note that the availability of and application monitoring of such an object is not sufficient for determining the presence of table data change over a checkpointed duration since an equal number of row creates and deletes over that duration would reflect no change in the object instance value. Additionally, table data change which does not change the number of rows in the table would not be reflected through simple monitoring of such an object instance.

通过提供包含表中行数的对象,管理应用程序可以决定如何最好地检索给定表的数据,并可以根据表大小选择不同的检索策略。请注意,此类对象的可用性和应用程序监控不足以确定检查点持续时间内是否存在表数据更改,因为在该持续时间内创建和删除相同数量的行不会反映对象实例值的更改。此外,不改变表中行数的表数据更改不会通过对此类对象实例的简单监视反映出来。

Instead, the change in the value of any table object instance data can be tracked through an object that monitors table change state as a function of time. An example is found in RFC 2790, Host Resources MIB:

相反,任何表对象实例数据的值的变化都可以通过一个对象来跟踪,该对象监视作为时间函数的表变化状态。RFC 2790中有一个示例,主机资源MIB:

   hrSWInstalledLastUpdateTime OBJECT-TYPE
       SYNTAX     TimeTicks
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
           "The value of sysUpTime when the hrSWInstalledTable
           was last completely updated.  Because caching of this
           data will be a popular implementation strategy,
           retrieval of this object allows a management station
           to obtain a guarantee that no data in this table is
           older than the indicated time."
       ::= { hrSWInstalled 2 }
        
   hrSWInstalledLastUpdateTime OBJECT-TYPE
       SYNTAX     TimeTicks
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
           "The value of sysUpTime when the hrSWInstalledTable
           was last completely updated.  Because caching of this
           data will be a popular implementation strategy,
           retrieval of this object allows a management station
           to obtain a guarantee that no data in this table is
           older than the indicated time."
       ::= { hrSWInstalled 2 }
        

A similar convention found in many standards track MIB modules is the "LastChange" type object.

在许多标准track MIB模块中发现的类似约定是“LastChange”类型的对象。

For example, the ENTITY-MIB, RFC 2737 [34], provides the following object:

例如,ENTITY-MIB RFC 2737[34]提供了以下对象:

entLastChangeTime OBJECT-TYPE SYNTAX TimeStamp

entLastChangeTime对象类型语法时间戳

     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
             "The value of sysUpTime at the time a conceptual row is
             created, modified, or deleted in any of these tables:
                     - entPhysicalTable
                     - entLogicalTable
                     - entLPMappingTable
                     - entAliasMappingTable
                     - entPhysicalContainsTable"
     ::= { entityGeneral 1 }
        
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
             "The value of sysUpTime at the time a conceptual row is
             created, modified, or deleted in any of these tables:
                     - entPhysicalTable
                     - entLogicalTable
                     - entLPMappingTable
                     - entAliasMappingTable
                     - entPhysicalContainsTable"
     ::= { entityGeneral 1 }
        

This convention is not formalized. There tend to be small differences in what a table's LastChanged object reflects. IF-MIB (RFC 2863 [20]) defines the following:

这项公约尚未正式化。表的上次更改对象所反映的内容往往存在细微差异。IF-MIB(RFC 2863[20])定义如下:

   ifTableLastChange  OBJECT-TYPE
       SYNTAX      TimeTicks
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
               "The value of sysUpTime at the time of the last
               creation or deletion of an entry in the ifTable.  If
               the number of entries has been unchanged since the
               last re-initialization of the local network management
               subsystem, then this object contains a zero value."
       ::= { ifMIBObjects 5 }
        
   ifTableLastChange  OBJECT-TYPE
       SYNTAX      TimeTicks
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
               "The value of sysUpTime at the time of the last
               creation or deletion of an entry in the ifTable.  If
               the number of entries has been unchanged since the
               last re-initialization of the local network management
               subsystem, then this object contains a zero value."
       ::= { ifMIBObjects 5 }
        

So, if an agent modifies a row with an SNMP SET on ifAdminStatus, the value of ifTableLastChange will not be updated. It is important to be specific about what can cause an object to update so that management applications will be able to detect and more properly act on these changes.

因此,如果代理使用ifAdminStatus上的SNMP集修改行,则不会更新ifTableLastChange的值。必须明确哪些因素会导致对象更新,以便管理应用程序能够检测到这些更改并对其采取更正确的行动。

The final way to keep distributed configuration data consistent is to use an event-driven model, where configuration changes are communicated as they occur. When the frequency of change to configuration is relatively low or polling a cache object is not desired, consider defining a notification that can be used to report all configuration change details.

保持分布式配置数据一致性的最后一种方法是使用事件驱动模型,在该模型中,配置更改在发生时进行通信。当配置更改的频率相对较低或不希望缓存缓存对象时,考虑定义可用于报告所有配置更改细节的通知。

When doing so, the option is available to an SNMPv3 (or SNMPv2c) agent to deliver the notification using either a trap or an inform. The decision as to which PDU to deliver to the recipient is generally a matter of local configuration. Vendors should recommend the use of informs over traps for NOTIFICATION-TYPE data since the agent can use the presence or absence of a response to help know whether it needs

执行此操作时,SNMPv3(或SNMPv2c)代理可以使用陷阱或通知发送通知。关于将哪个PDU交付给收件人的决定通常是本地配置的问题。供应商应建议对通知类型的数据使用Notifys over traps,因为代理可以使用是否存在响应来帮助了解是否需要

to retransmit or not. Overall, it is preferable to use an inform instead of a trap so that changes have a higher likelihood of confirmed end-to-end delivery.

是否重发。总的来说,最好使用通知而不是陷阱,以便更改具有更高的确认端到端交付的可能性。

As a matter of MIB module design, when practical, the NOTIFICATION-TYPE should include in the PDU all of the modified columnar objects in a row of a table. This makes it easier for the management application receiving the notification to keep track of what has changed in the row of a table and perform addition analysis on the state of the managed elements.

作为MIB模块设计的一个问题,如果可行,NOTIFICATION-TYPE应该在PDU中包含表的一行中所有修改的列对象。这使得接收通知的管理应用程序更容易跟踪表行中发生的更改,并对托管元素的状态执行添加分析。

However, the use of notifications to communicate the state of a rapidly changing object may not be ideal either. This leads us back to the MIB module design question of what is the right level of granularity to expose.

但是,使用通知来传达快速变化对象的状态也可能不理想。这让我们回到MIB模块设计问题,即什么是要公开的正确粒度级别。

Finally, having to poll many "LastChange" objects does not scale well. Consider providing a global LastChange type object to represent overall configuration in a given agent implementation.

最后,必须轮询许多“LastChange”对象并不能很好地扩展。考虑提供全局LASTROPE类型对象来表示给定代理实现中的总体配置。

3.3.6. Optimizing Configuration Data Transfer
3.3.6. 优化配置数据传输

Configuration management software should keep track of the current configuration of all devices under its control. It should ensure that the result is a consistent view of the configuration of the network, which can help reduce inadvertent configuration errors.

配置管理软件应跟踪其控制下所有设备的当前配置。它应该确保结果是网络配置的一致视图,这有助于减少意外的配置错误。

In devices that have very large amounts of configuration data, it can be costly to both the agent and the manager to have the manager periodically poll the entire contents of these configuration tables for synchronization purposes. A benefit of good synchronization between the manager and the agent is that the manager can determine the smallest and most effective set of data to send to managed devices when configuration changes are required. Depending on the table organization in the managed device and the agent implementation, this practice can reduce the burden on the managed device for activation of these configuration changes.

在具有大量配置数据的设备中,让管理器周期性地轮询这些配置表的全部内容以实现同步,这对代理和管理器来说都是非常昂贵的。管理器和代理之间良好同步的一个好处是,当需要更改配置时,管理器可以确定要发送到受管设备的最小和最有效的数据集。根据受管设备中的表组织和代理实现,这种做法可以减轻受管设备激活这些配置更改的负担。

In the previous section, we discussed the "LastChange" style of object. When viewed against the requirements just described, the LastChange object is insufficient for large amounts of data.

在上一节中,我们讨论了对象的“LastChange”样式。根据刚才描述的需求查看时,LastChange对象不足以处理大量数据。

There are three design options that can be used to assist with the synchronization of the configuration data found in the managed device with the manager:

有三个设计选项可用于帮助管理器同步托管设备中的配置数据:

1) Design multiple indices to partition the data in a table logically or break a table into a set of tables to partition the data based on what an application will use the table for

1) 设计多个索引以逻辑方式对表中的数据进行分区,或将一个表拆分为一组表,以根据应用程序将使用该表的内容对数据进行分区

2) Use a time-based indexing technique

2) 使用基于时间的索引技术

3) Define a control MIB module that manages a separate data delivery protocol

3) 定义管理单独数据传输协议的控制MIB模块

3.3.6.1. Index Design
3.3.6.1. 索引设计

Index design has a major impact on the amount of data that must be transferred between SNMP entities and can help to mitigate scaling issues with large tables.

索引设计对SNMP实体之间必须传输的数据量有重大影响,并有助于缓解大型表的扩展问题。

Many tables in standard MIB modules follow one of two indexing models:

标准MIB模块中的许多表遵循以下两种索引模型之一:

- Indexing based upon increasing Integer32 or Unsigned32 values of the kind one might find in an array.

- 基于数组中可能出现的整数32或无符号32值的递增进行索引。

- Associative indexing, which refers to the technique of using potentially sparse indices based upon a "key" of the sort one would use for a hash table.

- 关联索引,是指基于哈希表所使用的排序“键”,使用潜在稀疏索引的技术。

When tables grow to a very large number of rows, using an associative indexing scheme offers the useful ability to efficiently retrieve only the rows of interest.

当表增长到非常多的行时,使用关联索引方案可以有效地仅检索感兴趣的行。

For example, if an SNMP entity exposes a copy of the default-free Internet routing table as defined in the ipCidrRouteTable, it will presently contain around 100,000 rows.

例如,如果SNMP实体公开IPCIDROUTTETABLE中定义的默认免费Internet路由表的副本,则它当前将包含大约100000行。

Associative indexing is used in the ipCidrRouteTable and allows one to retrieve, for example, all routes for a given IPv4 destination 192.0.2/24.

关联索引在ipCidrRouteTable中使用,允许检索(例如)给定IPv4目标192.0.2/24的所有路由。

Yet, if the goal is to extract a copy of the table, the associative indexing reduces the throughput and potentially the performance of retrieval. This is because each of the index objects are appended to the object identifiers for every object instance returned.

然而,如果目标是提取表的副本,则关联索引会降低吞吐量,并可能降低检索性能。这是因为每个索引对象都附加到每个返回的对象实例的对象标识符中。

ipCidrRouteEntry OBJECT-TYPE SYNTAX IpCidrRouteEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "A particular route to a particular destination,

IPCIDROUTENTRY对象类型语法IPCIDROUTENTRY MAX-ACCESS不可访问状态当前描述“到特定目的地的特定路由,

       under a particular policy."
      INDEX {
        ipCidrRouteDest,
        ipCidrRouteMask,
        ipCidrRouteTos,
        ipCidrRouteNextHop
        }
        
       under a particular policy."
      INDEX {
        ipCidrRouteDest,
        ipCidrRouteMask,
        ipCidrRouteTos,
        ipCidrRouteNextHop
        }
        

A simple array-like index works efficiently since it minimizes the index size and complexity while increasing the number of rows that can be sent in a PDU. If the indexing is not sparse, concurrency can be gained by sending multiple asynchronous non-overlapping collection requests as is explained in RFC 2819 [32], Page 41 (in the section pertaining to Host Group indexing).

一个简单的类似数组的索引工作效率很高,因为它最小化了索引的大小和复杂性,同时增加了PDU中可以发送的行数。如果索引不是稀疏的,则可以通过发送多个异步非重叠收集请求来获得并发性,如RFC 2819[32]第41页(与主机组索引相关的部分)中所述。

Should requirements dictate new methods of access, multiple indices can be defined such that both associative and simple indexing can coexist to access a single logical table.

如果需求规定了新的访问方法,可以定义多个索引,以便关联索引和简单索引可以共存以访问单个逻辑表。

Two examples follow.

下面是两个例子。

First, consider the ifStackTable found in RFC 2863 [20] and the ifInvStackTable RFC 2864 [33]. They are logical equivalents with the order of the auxiliary (index) objects simply reversed.

首先,考虑RFC 2863〔20〕中的IFSTACKTABLE和IFNVSTACKIT RFC 2864〔33〕。它们是逻辑等价物,辅助(索引)对象的顺序只是颠倒过来的。

   ifStackEntry  OBJECT-TYPE
        SYNTAX        IfStackEntry
        MAX-ACCESS    not-accessible
        STATUS        current
        DESCRIPTION
                "Information on a particular relationship between
                two sub-layers, specifying that one sub-layer runs
                on 'top' of the other sub-layer.  Each sub-layer
                corresponds to a conceptual row in the ifTable."
                INDEX { ifStackHigherLayer, ifStackLowerLayer }
        ::= { ifStackTable 1 }
        
   ifStackEntry  OBJECT-TYPE
        SYNTAX        IfStackEntry
        MAX-ACCESS    not-accessible
        STATUS        current
        DESCRIPTION
                "Information on a particular relationship between
                two sub-layers, specifying that one sub-layer runs
                on 'top' of the other sub-layer.  Each sub-layer
                corresponds to a conceptual row in the ifTable."
                INDEX { ifStackHigherLayer, ifStackLowerLayer }
        ::= { ifStackTable 1 }
        
   ifInvStackEntry  OBJECT-TYPE
      SYNTAX        IfInvStackEntry
      MAX-ACCESS    not-accessible
      STATUS        current
      DESCRIPTION
          "Information on a particular relationship between two
          sub-layers, specifying that one sub-layer runs underneath
          the other sub-layer.  Each sub-layer corresponds to a
          conceptual row in the ifTable."
          INDEX { ifStackLowerLayer, ifStackHigherLayer }
      ::= { ifInvStackTable 1 }
        
   ifInvStackEntry  OBJECT-TYPE
      SYNTAX        IfInvStackEntry
      MAX-ACCESS    not-accessible
      STATUS        current
      DESCRIPTION
          "Information on a particular relationship between two
          sub-layers, specifying that one sub-layer runs underneath
          the other sub-layer.  Each sub-layer corresponds to a
          conceptual row in the ifTable."
          INDEX { ifStackLowerLayer, ifStackHigherLayer }
      ::= { ifInvStackTable 1 }
        

Second, table designs that can factor data into multiple tables with well-defined relationships can help reduce overall data transfer requirements. The RMON-MIB, RFC 2819 [32], demonstrates a very useful technique of organizing tables into control and data components. Control tables contain those objects that are configured and change infrequently, and the data tables contain information to be collected that can be large and may change quite frequently.

其次,表设计可以将数据分解为多个具有良好定义关系的表,这有助于减少总体数据传输需求。RMON-MIB RFC 2819[32]演示了一种非常有用的将表组织为控制和数据组件的技术。控制表包含那些不经常配置和更改的对象,而数据表包含要收集的信息,这些信息可能很大,并且可能经常更改。

As an example, the RMON hostControlTable provides a way to specify how to collect MAC addresses learned as a source or destination from a given port that provides transparent bridging of Ethernet packets.

例如,RMON hostControlTable提供了一种方法来指定如何从提供以太网数据包透明桥接的给定端口收集作为源或目标的MAC地址。

Configuration is accomplished using the hostControlTable. It is indexed by a simple integer. While this may seem to be array-like, it is common practice for command generators to encode the ifIndex into this simple integer to provide associative lookup capability.

使用hostControlTable完成配置。它由一个简单的整数索引。虽然这看起来像是数组,但命令生成器通常将ifIndex编码为这个简单的整数,以提供关联查找功能。

The RMON hostTable and hostTimeTable represent dependent tables that contain the results indexed by the hostControlTable entry.

RMON hostTable和HOSTTIMESTABLE表示包含由hostControlTable项索引的结果的从属表。

The hostTable is further indexed by the MAC address which provides the ability to reasonably search for a collection, such as the Organizationally Unique Identifier (OUI), the first three octets of the MAC address.

主机表由MAC地址进一步索引,MAC地址提供了合理搜索集合的能力,例如组织唯一标识符(OUI),MAC地址的前三个八位字节。

The hostTimeTable is designed explicitly for fast transfer of bulk RMON data. It demonstrates how to handle collecting large number of rows in the face of deletions and insertions by providing hostControlLastDeleteTime.

主机时间表是专门为快速传输大容量RMON数据而设计的。它演示了如何通过提供hostControlLastDeleteTime来处理在面临删除和插入时收集大量行的问题。

   hostControlLastDeleteTime OBJECT-TYPE
   SYNTAX     TimeTicks
   MAX-ACCESS read-only
   STATUS     current
   DESCRIPTION
       "The value of sysUpTime when the last entry
       was deleted from the portion of the hostTable
       associated with this hostControlEntry.  If no
       deletions have occurred, this value shall be zero."
   ::= { hostControlEntry 4 }
        
   hostControlLastDeleteTime OBJECT-TYPE
   SYNTAX     TimeTicks
   MAX-ACCESS read-only
   STATUS     current
   DESCRIPTION
       "The value of sysUpTime when the last entry
       was deleted from the portion of the hostTable
       associated with this hostControlEntry.  If no
       deletions have occurred, this value shall be zero."
   ::= { hostControlEntry 4 }
        
3.3.6.2. Time Based Indexing
3.3.6.2. 基于时间的索引

The TimeFilter as defined in RFC 2021 [44] and used in RMON2-MIB and Q-BRIDGE-MIB (RFC 2674 [26]) provides a way to obtain only those rows that have changed on or after some specified period of time has passed.

RFC 2021[44]中定义并在RMON2-MIB和Q-BRIDGE-MIB(RFC 2674[26])中使用的时间过滤器提供了一种仅获取在某个指定时间段上或之后更改的行的方法。

One drawback to TimeFilter index tables is that a given row can appear at many points in time, which artificially inflates the size of the table when performing standard getNext or getBulk data retrieval.

TimeFilter索引表的一个缺点是,给定的行可能出现在多个时间点,这会在执行标准getNext或getBulk数据检索时人为地增大表的大小。

3.3.6.3. Alternate Data Delivery Mechanisms
3.3.6.3. 替代数据交付机制

If the amount of data to transfer is larger than current SNMP design restrictions permit, as in the case of OCTET STRINGS (64k minus overhead of IP/UDP header plus SNMP header plus varbind list plus varbind encoding), consider delivery of the data via an alternate method, such as FTP and use a MIB module to control that data delivery process. In many cases, this problem can be avoided via effective MIB design. In other words, object types requiring this kind of transfer size should be used judiciously, if at all.

如果要传输的数据量大于当前SNMP设计限制允许,如在八位字节串(64/k的IP / UDP报头开销加上SNMP报头加上VALBIN列表加VALBIN编码)的情况下,考虑通过备用方法(例如FTP)传递数据,并使用MIB模块来控制数据传送过程。在许多情况下,通过有效的MIB设计可以避免这个问题。换句话说,需要这种传输大小的对象类型应该明智地使用(如果有的话)。

There are many enterprise MIB modules that provide control of the TFTP or FTP protocol. Often the SNMP part defines what to send where and setting an object initiates the operation (for an example, refer to the CISCO-FTP-CLIENT-MIB, discussed in [38]).

有许多企业MIB模块提供对TFTP或FTP协议的控制。通常,SNMP部分定义发送内容的位置,并设置启动操作的对象(例如,请参阅[38]中讨论的CISCO-FTP-CLIENT-MIB)。

Various approaches exist for allowing a local agent process running within the managed node to take a template for an object instance (for example for a set of interfaces), and adapt and apply it to all of the actual instances within the node. This is an architecture for one form of policy-based configuration (see [36], for example). Such an architecture, which must be designed into the agent and some portions of the MIB module, affords the efficiency of specifying many copies of instance data only once, along with the execution efficiency of distributing the application of the instance data to the agent.

存在各种方法来允许在托管节点内运行的本地代理进程获取对象实例的模板(例如一组接口),并将其适配并应用于节点内的所有实际实例。这是一种基于策略的配置形式的体系结构(例如,请参见[36])。这种体系结构必须设计到代理和MIB模块的某些部分中,提供了只指定一次实例数据的多个副本的效率,以及将实例数据的应用程序分发到代理的执行效率。

Other work is currently underway to improve efficiency for bulk SNMP transfer operations [37]. The objective of these efforts is simply the conveyance of more information with less overhead.

目前正在进行其他工作,以提高批量SNMP传输操作的效率[37]。这些努力的目标只是以较少的开销传递更多的信息。

3.4. More Index Design Issues
3.4. 更多索引设计问题

Section 3.3.5 described considerations for table row index design as it pertains to the synchronization of changes within sizable table rows. This section simply considers how to specify this syntactically and how to manage indices semantically.

第3.3.5节描述了表行索引设计的注意事项,因为它涉及在较大的表行内同步更改。本节只考虑如何在语法上指定该索引,以及如何在语义上管理索引。

In many respects, the design issues associated with indices in a MIB module are similar to those in a database. Care must be taken during the design phase to determine how often and what kind of information must be set or retrieved. The next few points provide some guidance.

在许多方面,与MIB模块中的索引相关联的设计问题与数据库中的索引类似。在设计阶段,必须注意确定设置或检索信息的频率和种类。下面几点提供了一些指导。

3.4.1. Simple Integer Indexing
3.4.1. 简单整数索引

When indexing tables using simple Integer32 or Unsigned32, start with one (1) and specify the maximum range of the value. Since object identifiers are unsigned long values, a question that arises is why not index from zero (0) instead of one(1)?

使用简单整数32或Unsigned32为表编制索引时,请从一(1)开始,并指定值的最大范围。由于对象标识符是无符号长值,因此出现了一个问题:为什么不从零(0)而不是从一(1)开始索引?

RFC 2578 [2], Section 7.7, page 28 states the following: Instances identified by use of integer-valued objects should be numbered starting from one (i.e., not from zero). The use of zero as a value for an integer-valued index object type should be avoided, except in special cases. Consider the provisions afforded by the following textual convention from the Interfaces Group MIB module [33]:

RFC 2578[2],第28页第7.7节规定:通过使用整数值对象识别的实例应从一开始编号(即,不是从零开始)。除特殊情况外,应避免使用零作为整数值索引对象类型的值。考虑下面的文本约定从接口组MIB模块(33)提供的条款:

   InterfaceIndexOrZero ::= TEXTUAL-CONVENTION
       DISPLAY-HINT "d"
       STATUS       current
       DESCRIPTION
           "This textual convention is an extension of the
           InterfaceIndex convention.  The latter defines a greater
           than zero value used to identify an interface or interface
           sub-layer in the managed system.  This extension permits the
           additional value of zero.  the value zero is object-specific
           and must therefore be defined as part of the description of
           any object which uses this syntax.  Examples of the usage of
           zero might include situations where interface was unknown,
           or when none or all interfaces need to be referenced."
       SYNTAX       Integer32 (0..2147483647)
        
   InterfaceIndexOrZero ::= TEXTUAL-CONVENTION
       DISPLAY-HINT "d"
       STATUS       current
       DESCRIPTION
           "This textual convention is an extension of the
           InterfaceIndex convention.  The latter defines a greater
           than zero value used to identify an interface or interface
           sub-layer in the managed system.  This extension permits the
           additional value of zero.  the value zero is object-specific
           and must therefore be defined as part of the description of
           any object which uses this syntax.  Examples of the usage of
           zero might include situations where interface was unknown,
           or when none or all interfaces need to be referenced."
       SYNTAX       Integer32 (0..2147483647)
        
3.4.2. Indexing with Network Addresses
3.4.2. 网络地址索引

There are many objects that use IPv4 addresses (SYNTAX IpAddress) as indexes. One such table is the ipAddrTable from RFC 2011 [14] IP-MIB. This limits the usefulness of the MIB module to IPv4. To avoid such limitations, use the addressing textual conventions INET-ADDRESS-MIB [13] (or updates to that MIB module), which provides a generic way to represent addresses for Internet Protocols. In using the InetAddress textual convention in this MIB, however, pay heed to the following advisory found in its description clause:

有许多对象使用IPv4地址(语法IpAddress)作为索引。RFC 2011[14]IP-MIB中的IPAddressTable就是这样一个表。这将MIB模块的用途限制在IPv4上。为避免此类限制,请使用寻址文本约定INET-ADDRESS-MIB[13](或对该MIB模块的更新),它提供了一种表示Internet协议地址的通用方法。但是,在本MIB中使用InetAddress文本约定时,请注意其描述条款中的以下建议:

When this textual convention is used as the syntax of an index object, there may be issues with the limit of 128 sub-identifiers specified in SMIv2, STD 58. In this case, the OBJECT-TYPE declaration MUST include a 'SIZE' clause to limit the number of potential instance sub-identifiers.

当此文本约定用作索引对象的语法时,SMIv2,STD 58中指定的128个子标识符的限制可能会出现问题。在这种情况下,对象类型声明必须包含一个“SIZE”子句,以限制潜在实例子标识符的数量。

One should consider the SMI limitation on the 128 sub-identifier specification when using certain kinds of network address index types. The most likely practical liability encountered in practice has been with DNS names, which can in fact be in excess of 128 bytes. The problem can be, of course, compounded when multiple indices of this type are specified for a table.

在使用某些类型的网络地址索引类型时,应该考虑128个子标识符规范的SMI限制。在实践中遇到的最可能的实际问题是DNS名称,它实际上可能超过128字节。当然,当为一个表指定多个此类索引时,问题可能会更加复杂。

3.5. Conflicting Controls
3.5. 冲突控制

MIB module designers should avoid specifying read-write objects that overlap in function partly or completely.

MIB模块设计者应避免指定在功能上部分或完全重叠的读写对象。

Consider the following situation where two read-write objects partially overlap when a dot1dBasePortEntry has a corresponding ifEntry.

考虑以下情况:当dot1dBasePrimTress具有对应的IFItIt时,两个读写对象部分重叠。

The BRIDGE-MIB defines the following managed object:

BRIDGE-MIB定义了以下托管对象:

   dot1dStpPortEnable OBJECT-TYPE
       SYNTAX  INTEGER {
                   enabled(1),
                   disabled(2)            }
       ACCESS  read-write
       STATUS  mandatory
       DESCRIPTION
           "The enabled/disabled status of the port."
       REFERENCE
           "IEEE 802.1D-1990: Section 4.5.5.2"
       ::= { dot1dStpPortEntry 4 }
        
   dot1dStpPortEnable OBJECT-TYPE
       SYNTAX  INTEGER {
                   enabled(1),
                   disabled(2)            }
       ACCESS  read-write
       STATUS  mandatory
       DESCRIPTION
           "The enabled/disabled status of the port."
       REFERENCE
           "IEEE 802.1D-1990: Section 4.5.5.2"
       ::= { dot1dStpPortEntry 4 }
        

The IF-MIB defines a similar managed object:

IF-MIB定义了一个类似的托管对象:

   ifAdminStatus OBJECT-TYPE
       SYNTAX  INTEGER {
                   up(1),       -- ready to pass packets
                   down(2),
                   testing(3)   -- in some test mode
               }
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "The desired state of the interface.  The testing(3)
           state indicates that no operational packets can be
           passed.  When a managed system initializes, all
           interfaces start with ifAdminStatus in the down(2) state.
           As a result of either explicit management action or per
           configuration information retained by the managed system,
           ifAdminStatus is then changed to either the up(1) or
        
   ifAdminStatus OBJECT-TYPE
       SYNTAX  INTEGER {
                   up(1),       -- ready to pass packets
                   down(2),
                   testing(3)   -- in some test mode
               }
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "The desired state of the interface.  The testing(3)
           state indicates that no operational packets can be
           passed.  When a managed system initializes, all
           interfaces start with ifAdminStatus in the down(2) state.
           As a result of either explicit management action or per
           configuration information retained by the managed system,
           ifAdminStatus is then changed to either the up(1) or
        
           testing(3) states (or remains in the down(2) state)."
       ::= { ifEntry 7 }
        
           testing(3) states (or remains in the down(2) state)."
       ::= { ifEntry 7 }
        

If ifAdminStatus is set to testing(3), the value to be returned for dot1dStpPortEnable is not defined. Without clarification on how these two objects interact, management implementations will have to monitor both objects if bridging is detected and correlate behavior.

如果ifAdminStatus设置为testing(3),则未定义要为Dot1DSPortable返回的值。如果不澄清这两个对象是如何交互的,管理实现就必须在检测到桥接并关联行为时监视这两个对象。

The dot1dStpPortEnable object type could have been written with more information about the behavior of this object when values of ifAdminStatus which impact it change. For example, text could be added that described proper return values for the dot1dStpPortEnable object instance for each of the possible values of ifAdminStatus.

当影响该对象的ifAdminStatus值发生更改时,可以使用有关该对象行为的更多信息编写Dot1DSPortable对象类型。例如,可以添加文本,描述ifAdminStatus的每个可能值的dot1dsPortable对象实例的正确返回值。

In those cases where overlap between objects is unavoidable, then as we have just described, care should be taken in the description of each of the objects to describe their possible interactions. In the case of an object type defined after an incumbent object type, it is necessary to include in the DESCRIPTION of this later object type the details of these interactions.

在无法避免对象之间重叠的情况下,如我们刚才所述,在描述每个对象时应注意描述其可能的相互作用。对于在现有对象类型之后定义的对象类型,有必要在后面的对象类型的描述中包含这些交互的细节。

3.6. Textual Convention Usage
3.6. 文本惯例用法

Textual conventions should be used whenever possible to create a consistent semantic for an oft-recurring datatype.

应尽可能使用文本约定为经常重复出现的数据类型创建一致的语义。

MIB modules often define a binary state object such as enable/disable or on/off. Current practice is to use existing Textual Conventions and define the read-write object in terms of a TruthValue from SNMPv2-TC [3]. For example, the Q-BRIDGE-MIB [26] defines:

MIB模块通常定义二进制状态对象,如启用/禁用或打开/关闭。当前的做法是使用现有的文本约定,并根据SNMPv2 TC[3]中的TruthValue定义读写对象。例如,Q-BRIDGE-MIB[26]定义:

   dot1dTrafficClassesEnabled OBJECT-TYPE
       SYNTAX      TruthValue
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
          "The value true(1) indicates that Traffic Classes are
          enabled on this bridge.  When false(2), the bridge
          operates with a single priority level for all traffic."
       DEFVAL      { true }
       ::= { dot1dExtBase 2 }
        
   dot1dTrafficClassesEnabled OBJECT-TYPE
       SYNTAX      TruthValue
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
          "The value true(1) indicates that Traffic Classes are
          enabled on this bridge.  When false(2), the bridge
          operates with a single priority level for all traffic."
       DEFVAL      { true }
       ::= { dot1dExtBase 2 }
        

Textual conventions that have a reasonable chance of being reused in other MIB modules ideally should also be defined in a separate MIB module to facilitate sharing of such object types. For example, all ATM MIB modules draw on the ATM-TC-MIB [39] to reference and utilize common definitions for addressing, service class values, and the like.

理想情况下,有合理机会在其他MIB模块中重用的文本约定也应该在单独的MIB模块中定义,以便于共享此类对象类型。例如,所有ATM MIB模块都利用ATM-TC-MIB[39]来引用和利用寻址、服务类值等的通用定义。

To simplify management, it is recommended that existing SNMPv2-TC based definitions be used when possible. For example, consider the following object definition:

为简化管理,建议尽可能使用现有的基于SNMPv2 TC的定义。例如,考虑下面的对象定义:

   acmePatioLights OBJECT-TYPE
       SYNTAX  INTEGER {
                   on(1),
                   off(2),
       }
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Current status of outdoor lighting."
       ::= { acmeOutDoorElectricalEntry 3 }
        
   acmePatioLights OBJECT-TYPE
       SYNTAX  INTEGER {
                   on(1),
                   off(2),
       }
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "Current status of outdoor lighting."
       ::= { acmeOutDoorElectricalEntry 3 }
        

This could be defined as follows using existing SNMPv2-TC TruthValue.

使用现有的SNMPv2 TC TruthValue可以如下定义。

   acmePatioLightsOn OBJECT-TYPE
       SYNTAX  TruthValue
       MAX-ACCESS  read-write
       STATUS      current
       DESCRI2096PTION
           "Current status of outdoor lighting.  When set to true (1),
           this means that the lights are enabled and turned on.
           When set to false (2), the lights are turned off."
        ::= { acmeOutDoorElectricalEntry 3 }
        
   acmePatioLightsOn OBJECT-TYPE
       SYNTAX  TruthValue
       MAX-ACCESS  read-write
       STATUS      current
       DESCRI2096PTION
           "Current status of outdoor lighting.  When set to true (1),
           this means that the lights are enabled and turned on.
           When set to false (2), the lights are turned off."
        ::= { acmeOutDoorElectricalEntry 3 }
        
3.7. Persistent Configuration
3.7. 持久配置

Many network devices have two levels of persistence with regard to configuration data. In the first case, the configuration data sent to the device is persistent only until changed with a subsequent configuration operation, or the system is reinitialized. The second level is where the data is made persistent as an inherent part of the acceptance of the configuration information. Some configuration shares both these properties, that is, that on acceptance of new configuration data it is saved permanently and in memory. Neither of these necessarily means that the data is used by the operational code. Sometimes separate objects are required to activate this new configuration data for use by the operational code.

对于配置数据,许多网络设备具有两个级别的持久性。在第一种情况下,发送到设备的配置数据是持久的,直到通过后续配置操作进行更改,或者系统重新初始化。第二个层次是将数据持久化,作为接受配置信息的固有部分。某些配置共享这两个属性,即在接受新配置数据时,它将永久保存在内存中。这两者都不一定意味着操作代码使用数据。有时需要单独的对象来激活此新配置数据,以供操作代码使用。

However, many SNMP agents presently implement simple persistence models, which do not reflect all the relationships of the configuration data to the actual persistence model as described above. Some SNMP set requests against MIB objects with MAX-ACCESS read-write are written automatically to a persistent store. In other cases, they are not. In some of the latter cases, enterprise MIB

然而,许多SNMP代理目前实现简单的持久性模型,这些模型并不反映配置数据与实际持久性模型之间的所有关系,如上所述。对具有MAX-ACCESS读写权限的MIB对象的某些SNMP set请求会自动写入持久存储。在其他情况下,情况并非如此。在后一种情况下,企业MIB

objects are required in order to get standard configuration stored, thus making it difficult for a generic application to have a consistent effect.

对象是存储标准配置所必需的,因此一般应用程序很难获得一致的效果。

There are standard conventions for saving configuration data. The first method uses the Textual Convention known as StorageType [3] which explicitly defines a given row's persistence requirement.

有保存配置数据的标准约定。第一种方法使用称为StorageType[3]的文本约定,该约定明确定义了给定行的持久性需求。

Examples include the RFC 3231 [25] definition for the schedTable row object schedStorageType of syntax StorageType, as well as similar row objects for virtually all of the tables of the SNMP View-based Access Control Model MIB [10].

示例包括syntax StorageType的可调度行对象schedStorageType的RFC 3231[25]定义,以及基于SNMP视图的访问控制模型MIB[10]的几乎所有表的类似行对象。

A second method for persistence simply uses the DESCRIPTION clause to define how instance data should persist. RFC 2674 [26] explicitly defines Dot1qVlanStaticEntry data persistence as follows:

第二种持久化方法只是使用DESCRIPTION子句定义实例数据应该如何持久化。RFC 2674[26]明确定义了Dot1qVlanStaticEntry数据持久性,如下所示:

   dot1qVlanStaticTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF Dot1qVlanStaticEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
        "A table containing static configuration information for
        each VLAN configured into the device by (local or
        network) management.  All entries are permanent and will
        be restored after the device is reset."
       ::= { dot1qVlan 3 }
        
   dot1qVlanStaticTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF Dot1qVlanStaticEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
        "A table containing static configuration information for
        each VLAN configured into the device by (local or
        network) management.  All entries are permanent and will
        be restored after the device is reset."
       ::= { dot1qVlan 3 }
        

The current practice is a dual persistence model where one can make changes to run-time configuration as well as to a non-volatile configuration read at device initialization. The DISMAN-SCHEDULE-MIB module [25] provides an example of this practice. A row entry of its SchedTable specifies the parameters by which an agent MIB variable instance can be set to a specific value at some point in time and governed by other constraints and directives. One of those is:

目前的做法是一种双持久性模型,在这种模型中,可以对运行时配置以及在设备初始化时读取的非易失性配置进行更改。DISAN-SCHEDULE-MIB模块[25]提供了这种做法的示例。其SchedTable的行条目指定参数,通过这些参数,可以在某个时间点将代理MIB变量实例设置为特定值,并由其他约束和指令进行管理。其中之一是:

schedStorageType OBJECT-TYPE SYNTAX StorageType MAX-ACCESS read-create STATUS current DESCRIPTION "This object defines whether this scheduled action is kept in volatile storage and lost upon reboot or if this row is backed up by non-volatile or permanent storage. Conceptual rows having the value `permanent' must allow write access to the columnar objects schedDescr, schedInterval, schedContextName, schedVariable, schedValue, and schedAdminStatus. If an implementation supports the

schedStorageType对象类型语法StorageType MAX-ACCESS读取创建状态当前描述“此对象定义此计划操作是否保存在易失性存储中,并在重新启动时丢失,或者此行是否由非易失性或永久性存储备份。具有值“permanent”的概念行必须允许对列对象schedDescr、schedInterval、schedContextName、schedVariable、schedValue和schedAdminStatus进行写访问。如果实现支持

             schedCalendarGroup, write access must be also allowed to
             the columnar objects schedWeekDay, schedMonth, schedDay,
             schedHour, schedMinute."
        DEFVAL { volatile }
        ::= { schedEntry 19 }
        
             schedCalendarGroup, write access must be also allowed to
             the columnar objects schedWeekDay, schedMonth, schedDay,
             schedHour, schedMinute."
        DEFVAL { volatile }
        ::= { schedEntry 19 }
        

It is important, however, to reiterate that the persistence is ultimately controlled by the capabilities and features (with respect to the storage model of management data) of the underlying system on which the MIB Module agent is being implemented. This falls into very much the same kind of issue set as, for example, the situation where the size of data storage in the system for a Counter object type is not the same as that in the corresponding MIB Object Type. To generalize, the final word on the "when" and "how" of storage of persistent data is dictated by the system and the implementor of the agent on the system.

但是,必须重申,持久性最终由实现MIB模块代理的基础系统的功能和特性(关于管理数据的存储模型)控制。这在很大程度上属于同一类问题集,例如,系统中计数器对象类型的数据存储大小与相应MIB对象类型的数据存储大小不同的情况。概括地说,持久数据存储的“何时”和“如何”由系统和系统上代理的实现者决定。

3.8. Configuration Sets and Activation
3.8. 配置集和激活

An essential notion for configuration of network elements with SNMP is awareness of the difference between the set of one or more configuration objects from the activation of those configuration changes in the actual subsystem. That is, it often only makes sense to activate a group of objects as a single 'transaction'.

使用SNMP配置网元的一个基本概念是,通过激活实际子系统中的这些配置更改,了解一组或多个配置对象之间的差异。也就是说,通常只有将一组对象作为单个“事务”激活才有意义。

3.8.1. Operational Activation Considerations
3.8.1. 操作激活注意事项

A MIB module design must consider the implications of the preceding in the context of changes that will occur throughout a subsystem when changes are activated. This is particularly true for configuration changes that are complex. This complexity can be in terms of configuration data or the operational ramifications of the activation of the changes in the managed subsystem. A practical technique to accommodate this kind of activation is the partitioning of contained configuration sets, as it pertains to their being activated as changes. Any complex configuration should have a master on/off switch (MIB object type) as well as strategically placed on/off switches that partition the activation of configuration data in the managed subsystem. These controls play a pivotal role during the configuration process as well as during subsequent diagnostics. Generally, a series of set operations should not cause an agent to activate each object, causing operational instability to be introduced with every changed object instance. To avoid this liability, ideally a series of Set PDUs can install the configuration and a final set series of PDUs can activate the changes.

MIB模块设计必须考虑在变化的情况下,在整个子系统中发生变化时的前面的影响。对于复杂的配置更改尤其如此。这种复杂性可能与配置数据有关,也可能与受管子系统中变更激活的操作结果有关。适应这种激活的一种实用技术是对包含的配置集进行分区,因为它涉及到它们在发生更改时被激活。任何复杂的配置都应该有一个主开/关开关(MIB对象类型)以及策略性地放置的开/关开关,这些开关对受管子系统中配置数据的激活进行分区。这些控件在配置过程以及后续诊断过程中起着关键作用。通常,一系列集合操作不应导致代理激活每个对象,从而导致每个更改的对象实例都会引入操作不稳定性。为了避免这种责任,理想情况下,一系列设置的PDU可以安装配置,而一系列最终设置的PDU可以激活更改。

During diagnostic situations, certain on/off switches can be set to localize the perceived error instead of having to remove the configuration.

在诊断情况下,可以设置某些开/关开关以定位感知的错误,而不必删除配置。

An example of such an object from the OSPF Version 2 MIB [29] is the global ospfAdminStat:

OSPF版本2 MIB[29]中的此类对象的一个示例是全局ospfAdminStat:

   ospfAdminStat OBJECT-TYPE
       SYNTAX   Status
       MAX-ACCESS   read-write
       STATUS   current
       DESCRIPTION
          "The administrative status of  OSPF  in the
          router.  The value 'enabled' denotes that the
          OSPF Process is active on at least one interface;
          'disabled' disables it on all interfaces."
      ::= { ospfGeneralGroup 2 }
        
   ospfAdminStat OBJECT-TYPE
       SYNTAX   Status
       MAX-ACCESS   read-write
       STATUS   current
       DESCRIPTION
          "The administrative status of  OSPF  in the
          router.  The value 'enabled' denotes that the
          OSPF Process is active on at least one interface;
          'disabled' disables it on all interfaces."
      ::= { ospfGeneralGroup 2 }
        

Elsewhere in the OSPF MIB, the semantics of setting ospfAdminStat to enabled(2) are clearly spelled out.

在OSPF MIB的其他地方,将ospfAdminStat设置为enabled(2)的语义已经清楚地阐明。

The Scheduling MIB [25] exposes such an object on each entry in the scheduled actions table, along with the corresponding stats object type (with read-only ACCESS) on the scheduled actions row instance.

调度MIB[25]在调度操作表的每个条目上公开这样一个对象,以及调度操作行实例上相应的stats对象类型(具有只读访问权限)。

This reflects a recurring basic design pattern which brings about semantic clarity in the object type usage. A table can expose one columnar object type which is strictly for administrative control. When read, an instance of this object type will reflect its last set or defaulted value. A companion operational columnar object type, with MAX-ACCESS of read-only, provides the current state of activation or deactivation resulting from the last set of the administrative columnar instance. It is fully expected that these administrative and operational columnar instances may reflect different values over some period of time of activation latency, which is why they are separate. Further sections display some of the problems which can result from attempting to combine the operational and administrative row columns into a single object type.

这反映了一个重复出现的基本设计模式,它在对象类型使用中带来了语义清晰性。一个表可以公开一个列对象类型,该类型严格用于管理控制。读取时,此对象类型的实例将反映其上次设置的值或默认值。附带的操作列对象类型(MAX-ACCESS为只读)提供由最后一组管理列实例产生的激活或停用的当前状态。完全可以预期,这些管理和操作列实例可能在激活延迟的某段时间内反映不同的值,这就是为什么它们是分开的。进一步的部分将显示一些问题,这些问题可能是由于尝试将操作行列和管理行列合并到单个对象类型中而导致的。

Note that all of this is independent of the RowStatus columnar object, and the notion of 'activation' as it pertains to RowStatus. A defined RowStatus object type should be strictly concerned with the management of the table row itself (with 'activation' indicating "the conceptual row is available for use by the managed device" [3], and not to be confused with any operational activation semantics).

请注意,所有这些都独立于RowStatus列对象以及与RowStatus相关的“激活”概念。定义的RowStatus对象类型应严格关注表行本身的管理(“激活”表示“概念行可供受管设备使用”[3],不要与任何操作激活语义混淆)。

In the following example, schedAdminStatus controls activation of the scheduled action, and schedOperStatus reports on its operational status:

在以下示例中,schedAdminStatus控制计划操作的激活,schedOperStatus报告其操作状态:

   schedAdminStatus OBJECT-TYPE
       SYNTAX      INTEGER {
                       enabled(1),
                       disabled(2)
                   }
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The desired state of the schedule."
       DEFVAL { disabled }
       ::= { schedEntry 14 }
        
   schedAdminStatus OBJECT-TYPE
       SYNTAX      INTEGER {
                       enabled(1),
                       disabled(2)
                   }
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The desired state of the schedule."
       DEFVAL { disabled }
       ::= { schedEntry 14 }
        
   schedOperStatus OBJECT-TYPE
       SYNTAX      INTEGER {
                       enabled(1),
                       disabled(2),
                       finished(3)
                   }
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "The current operational state of this schedule.  The state
            enabled(1) indicates this entry is active and that the
            scheduler will invoke actions at appropriate times.  The
            disabled(2) state indicates that this entry is currently
            inactive and ignored by the scheduler.  The finished(3)
            state indicates that the schedule has ended.  Schedules
            in the finished(3) state are ignored by the scheduler.
            A one-shot schedule enters the finished(3) state when it
            deactivates itself."
       ::= { schedEntry 15 }
        
   schedOperStatus OBJECT-TYPE
       SYNTAX      INTEGER {
                       enabled(1),
                       disabled(2),
                       finished(3)
                   }
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "The current operational state of this schedule.  The state
            enabled(1) indicates this entry is active and that the
            scheduler will invoke actions at appropriate times.  The
            disabled(2) state indicates that this entry is currently
            inactive and ignored by the scheduler.  The finished(3)
            state indicates that the schedule has ended.  Schedules
            in the finished(3) state are ignored by the scheduler.
            A one-shot schedule enters the finished(3) state when it
            deactivates itself."
       ::= { schedEntry 15 }
        
3.8.2. RowStatus and Deactivation
3.8.2. 行状态和停用

RowStatus objects should not be used to control activation/deactivation of a configuration. While RowStatus looks ideally suited for such a purpose since a management application can set a row to active(1), then set it to notInService(2) to disable it then make it active(1) again, there is no guarantee that the agent won't discard the row while it is in the notInService(2) state. RFC 2579 [3], page 15 states:

RowStatus对象不应用于控制配置的激活/停用。虽然RowStatus看起来非常适合这种用途,因为管理应用程序可以将行设置为活动(1),然后将其设置为notInService(2)以禁用该行,然后再次将其激活(1),但无法保证代理不会在该行处于notInService(2)状态时丢弃该行。RFC 2579[3],第15页规定:

The agent must detect conceptual rows that have been in either state for an abnormally long period of time and remove them. It is the responsibility of the DESCRIPTION clause of the status column to indicate what an abnormally long period of time would be.

代理必须检测处于任一状态的概念行异常长的时间,并将其删除。status列的DESCRIPTION子句负责指示异常长的时间段。

The DISMAN-SCHEDULE-MIB's managed object schedAdminStatus demonstrates how to separate row control from row activation. Setting the schedAdminStatus to disabled(2) does not cause the row to be aged out/removed from the table.

DISMAN-SCHEDULE-MIB的托管对象schedAdminStatus演示了如何将行控制与行激活分离。将schedAdminStatus设置为disabled(2)不会导致该行过时/从表中删除。

Finally, a reasonable agent implementation must consider how many rows will be allowed to be created in the notReady/notInService state such that resources are not exhausted by an errant application.

最后,合理的代理实现必须考虑允许在NoTruty/NoTiService状态下创建多少行,这样资源就不会被错误的应用程序耗尽。

3.9. SET Operation Latency
3.9. 设置操作延迟

Many standards track and enterprise MIB modules that contain read-write objects assume that an agent can complete a set operation as quickly as an agent can send back the status of the set operation to the application.

许多包含读写对象的标准track和enterprise MIB模块都假定代理可以尽快完成设置操作,就像代理可以将设置操作的状态发送回应用程序一样。

Consider the subtle operational shortcomings in the following object. It both reports the current state and allows a SET operation to change to a possibly new state.

考虑以下对象中的细微操作缺陷。它既报告当前状态,又允许SET操作更改为可能的新状态。

wheelRotationState  OBJECT-TYPE
      SYNTAX        INTEGER { unknown(0),
                              idle(1),
                              spinClockwise(2),
                              spinCounterClockwise(3)
                             }
      MAX-ACCESS    read-write
      STATUS        current
      DESCRIPTION
      "The current state of a wheel."
  ::= { XXX 2 }
        
wheelRotationState  OBJECT-TYPE
      SYNTAX        INTEGER { unknown(0),
                              idle(1),
                              spinClockwise(2),
                              spinCounterClockwise(3)
                             }
      MAX-ACCESS    read-write
      STATUS        current
      DESCRIPTION
      "The current state of a wheel."
  ::= { XXX 2 }
        

With the object defined, the following example represents one possible transaction.

定义了对象后,下面的示例表示一个可能的事务。

Time  Command Generator --------> <--- Command Responder
----- -----------------                -----------------
|
A  GetPDU(wheelRotationState.1.1)
|
|                          ResponsePDU(error-index 0,
|                                       error-code 0)
|
B                          wheelRotationState.1.1 == spinClockwise(2)
|
C  SetPDU(wheelRotationState.1.1 =
|                   spinCounterClockwise(3)
|
|                          ResponsePDU(error-index 0,
|                                       error-code 0)
|
D                          wheelRotationState.1.1
                                           == spinCounterClockwise(3)
|
E  GetPDU(wheelRotationState.1.1)
|
F                          ResponsePDU(error-index 0,
|                                       error-code 0)
|
V                          wheelRotationState.1.1 == spinClockwise(2)
   ....some time, perhaps seconds, later....
|
G       GetPDU(wheelRotationState.1.1)
|
H                         ResponsePDU(error-index 0,
|                                      error-code 0)
|                       wheelRotationState.1.1
V                                          == spinCounterClockwise(3)
        
Time  Command Generator --------> <--- Command Responder
----- -----------------                -----------------
|
A  GetPDU(wheelRotationState.1.1)
|
|                          ResponsePDU(error-index 0,
|                                       error-code 0)
|
B                          wheelRotationState.1.1 == spinClockwise(2)
|
C  SetPDU(wheelRotationState.1.1 =
|                   spinCounterClockwise(3)
|
|                          ResponsePDU(error-index 0,
|                                       error-code 0)
|
D                          wheelRotationState.1.1
                                           == spinCounterClockwise(3)
|
E  GetPDU(wheelRotationState.1.1)
|
F                          ResponsePDU(error-index 0,
|                                       error-code 0)
|
V                          wheelRotationState.1.1 == spinClockwise(2)
   ....some time, perhaps seconds, later....
|
G       GetPDU(wheelRotationState.1.1)
|
H                         ResponsePDU(error-index 0,
|                                      error-code 0)
|                       wheelRotationState.1.1
V                                          == spinCounterClockwise(3)
        

The response to the GET request at time E will often confuse management applications that assume the state of the object should be spinCounterClockwise(3). In reality, the wheel is slowing down in order to come to the idle state then begin spinning counter clockwise.

在时间E对GET请求的响应通常会混淆管理应用程序,这些应用程序假定对象的状态应该是逆时针旋转的(3)。实际上,车轮正在减速以达到怠速状态,然后开始逆时针旋转。

This possibility of confusing and paradoxical interactions of administrative and operational state is inevitable when a single object type is used to control and report on both types of state. One common practice which we have already seen is to separate out the

当使用单一对象类型来控制和报告两种类型的状态时,管理状态和操作状态之间出现混淆和矛盾的交互的可能性是不可避免的。我们已经看到的一种常见做法是将

desired (settable) state from current state. The objects ifAdminStatus and ifOperStatus from RFC 2863 [20] provide such an example of the separation of objects into desired and current state.

当前状态的所需(可设置)状态。RFC 2863[20]中的对象ifAdminStatus和ifOperStatus提供了将对象分离为所需和当前状态的示例。

3.9.1. Subsystem Latency, Persistence Latency, and Activation Latency
3.9.1. 子系统延迟、持久性延迟和激活延迟

A second way latency can be introduced in SET operations is caused by delay in agent implementations that must interact with loosely coupled subsystems. The time it takes the instrumented system to accept the new configuration information from the SNMP agent, process it and 'install' the updated configuration in the system or otherwise process the directives can often be longer than the SNMP response timeout.

在SET操作中引入延迟的第二种方式是由必须与松散耦合的子系统交互的代理实现中的延迟引起的。插入仪器的系统从SNMP代理接受新配置信息、处理该信息并在系统中“安装”更新的配置或以其他方式处理指令所需的时间通常会长于SNMP响应超时。

In these cases, it is desirable to provide a "current state" object type which can be polled by the management application to determine the state of control of the loosely coupled subsystem which was affected by its configuration update.

在这些情况下,希望提供“当前状态”对象类型,该对象类型可由管理应用程序轮询以确定受其配置更新影响的松散耦合子系统的控制状态。

More generally, some MIB objects may have high latencies associated with changes to their values. This could be either a function of saving the changed value to a persistent storage type, and/or activating a subsystem that inherently has high latency as discussed above. When defining such MIB objects, it might be wise to have the agent process set operations in the managed subsystem as soon as the Set PDU has been processed, and then update appropriate status objects when the save-to- persistent storage and (if applicable) activation has succeeded or is otherwise complete. Another approach would be to cause a notification to be sent that indicates that the operation has been completed.

更一般地说,某些MIB对象可能具有与其值更改相关联的高延迟。这可以是将更改后的值保存为持久存储类型的功能,和/或激活固有高延迟的子系统,如上所述。在定义此类MIB对象时,最好在处理完设置的PDU后立即让代理进程在托管子系统中设置操作,然后在保存到持久性存储和(如果适用)激活成功或以其他方式完成时更新相应的状态对象。另一种方法是发送通知,指示操作已完成。

When you describe an activation object, the DESCRIPTION clauses for these objects should give a hint about the likely latency for the completion of the operation. Keep in mind that from a management software perspective (as presented in the example of schedAdminStatus in Section 3.8.1), the combined latency of saving-to-persistence and activation are not distinguishable when they are part of a single operation.

当您描述激活对象时,这些对象的描述子句应该给出完成操作的可能延迟的提示。请记住,从管理软件的角度来看(如第3.8.1节中schedAdminStatus示例所示),当保存到持久化和激活的组合延迟是单个操作的一部分时,它们是不可区分的。

3.10. Notifications and Error Reporting
3.10. 通知和错误报告

For the purpose of this section, a 'notification' is as described in the SMIv2, RFC 2578 [2], by the NOTIFICATION-TYPE macro. Notifications can be sent in either SNMPv2c [19] or SNMPv3 TRAP or InformRequest PDUs. Given the sensitivity of configuration information, it is recommended that configuration operations always be performed using SNMPv3 due to its enhanced security capabilities. InformRequest PDUs should be used in preference to TRAP PDUs since

在本节中,“通知”如SMIv2 RFC 2578[2]中所述,由通知类型宏执行。通知可以通过SNMPv2c[19]或SNMPv3陷阱或InformRequest PDU发送。鉴于配置信息的敏感性,建议始终使用SNMPv3执行配置操作,因为它具有增强的安全功能。应优先使用InformRequest PDU而不是陷阱PDU,因为

the recipient of the InformRequest PDUs responds with a Response PDU. This acknowledgment can be used to avoid unnecessary retransmission of NOTIFICATION-TYPE information when retransmissions are in fact required. The use of InformRequest PDUs (as opposed to TRAPs) is not at the control of the MIB module designer or agent implementor. The determination as to whether or not a TRAP or InformRequest PDU is sent from an SNMPv2c or SNMPv3 agent is generally a function of the agent's local configuration (but can be controlled with MIB objects in SNMPv3). To the extent notification timeout and retry values are determined by local configuration parameters, care should be taken to avoid unnecessary retransmission of InformRequest PDUs.

InformRequest PDU的接收者使用响应PDU进行响应。此确认可用于避免在实际需要重新传输时不必要地重新传输通知类型信息。InformRequest PDU的使用(与陷阱相反)不受MIB模块设计器或代理实现者的控制。关于是否从SNMPv2c或SNMPv3代理发送陷阱或InformRequest PDU的确定通常是代理的本地配置的函数(但可以使用SNMPv3中的MIB对象进行控制)。如果通知超时和重试值由本地配置参数确定,则应注意避免不必要地重新传输InformRequest PDU。

Configuration change and error information conveyed in InformRequest PDUs can be an important part of an effective SNMP-based management system. They also have the potential to be overused. This section offers some guidance for effective definition of NOTIFICATION-TYPE information about configuration changes that can be carried in InformRequest PDUs. Notifications can also play a key role for all kinds of error reporting from hardware failures to configuration and general policy errors. These types of notifications should be designed as described in Section 3.11 (Application Error Reporting).

InformRequest PDU中传输的配置更改和错误信息可能是有效的基于SNMP的管理系统的重要组成部分。它们也有可能被过度使用。本节提供了一些关于可以在InformRequest PDU中进行的配置更改的通知类型信息的有效定义指南。对于从硬件故障到配置和一般策略错误的各种错误报告,通知也可以发挥关键作用。这些类型的通知应按照第3.11节(应用程序错误报告)所述进行设计。

3.10.1. Identifying Source of Configuration Changes
3.10.1. 确定配置更改的来源

A NOTIFICATION-TYPE designed to report configuration changes should report the identity of the management entity initiating the configuration change. Specifically, if the entity is known to be a SNMP command generator, the transport address and SNMP parameters as found in table snmpTargetParamsTable from RFC 3413 SNMP-TARGET-MIB should be reported where possible. For reporting of configuration changes outside of the SNMP domain, the applicable change mechanism (for example, CLI vs. HTTP-based management client access) should be reported, along with whatever notion of "user ID" of the change initiator is applicable and available.

设计用于报告配置更改的通知类型应报告发起配置更改的管理实体的标识。具体而言,如果已知该实体是SNMP命令生成器,则应尽可能报告RFC 3413 SNMP-TARGET-MIB表snmpTargetParamsTable中的传输地址和SNMP参数。要报告SNMP域之外的配置更改,应报告适用的更改机制(例如,CLI与基于HTTP的管理客户端访问),以及更改发起人的“用户ID”概念是否适用和可用。

3.10.2. Limiting Unnecessary Transmission of Notifications
3.10.2. 限制不必要的通知传输

The design of event-driven synchronization models, essential to configuration management, can use notifications as an important enabling technique. Proper usage of notifications allows the manager's view of the managed element's configuration to be in close synchronization with the actual state of the configuration of the managed element.

对于配置管理至关重要的事件驱动同步模型的设计,可以使用通知作为一种重要的启用技术。通知的正确使用允许管理者对托管元素配置的视图与托管元素配置的实际状态紧密同步。

When designing new NOTIFICATION-TYPEs, consider how to limit the number of notifications PDUs that will be sent with the notification information defined in the NOTIFICATION-TYPE in response to a configuration change or error event.

在设计新通知类型时,考虑如何限制通知配置PDU的数量,以响应配置更改或错误事件,在通知通知类型中定义的通知信息发送。

InformRequest PDUs, when compared to TRAP PDUs, have an inherent advantage when the concern is the reduction of unnecessary messages from the system generating the NOTIFICATION-TYPE data, when in fact retransmission of this data is required. That is, an InformRequest PDU is acknowledged by the receiving entity with a Response PDU. The receipt of this response allows the entity which generated the InformRequest PDU to verify (and record an audit entry, where such facilities exist on the agent system) that the message was received. As a matter of notification protocol, this receipt guarantee is not available when using TRAP PDUs, and if it is required, must be accomplished by the agent using some mechanism out of band to SNMP, and usually requiring the penalty of polling.

与陷阱PDU相比,InformRequest PDU具有一个固有的优势,即当实际上需要重新传输此数据时,其关注点是减少来自生成通知类型数据的系统的不必要消息。也就是说,接收实体使用响应PDU确认InformRequest PDU。收到此响应后,生成InformRequest PDU的实体可以验证(并记录审计条目,如果代理系统上存在此类设施)消息是否已收到。作为通知协议,在使用陷阱PDU时,此接收保证不可用,如果需要,必须由代理使用SNMP带外机制完成,通常需要轮询惩罚。

Regardless of the specific PDUs used to convey them, one way to limit the unnecessary generation of notifications is to include in the NOTIFICATION-TYPE definition situations where it need not be sent. A good example is the frDLCIStatusChange defined in FRAME-RELAY-DTE-MIB, RFC 2115 [21].

不管用于传递通知的特定PDU是什么,限制不必要的通知生成的一种方法是在通知类型定义中包括不需要发送通知的情况。一个很好的例子是frDLCIStatusChange,定义于FRAME-RELAY-DTE-MIB,RFC 2115[21]中。

   frDLCIStatusChange NOTIFICATION-TYPE
       OBJECTS  { frCircuitState }
       STATUS      current
       DESCRIPTION
          "This trap indicates that the indicated Virtual Circuit
          has changed state.  It has either been created or
          invalidated, or has toggled between the active and
          inactive states.  If, however, the reason for the state
          change is due to the DLCMI going down, per-DLCI traps
          should not be generated."
   ::= { frameRelayTraps 1 }
        
   frDLCIStatusChange NOTIFICATION-TYPE
       OBJECTS  { frCircuitState }
       STATUS      current
       DESCRIPTION
          "This trap indicates that the indicated Virtual Circuit
          has changed state.  It has either been created or
          invalidated, or has toggled between the active and
          inactive states.  If, however, the reason for the state
          change is due to the DLCMI going down, per-DLCI traps
          should not be generated."
   ::= { frameRelayTraps 1 }
        

There are a number of other techniques which can be used to reduce the unwanted generation of NOTIFICATION-TYPE information. When defining notifications, the designer can specify a number of temporal limitations on the generation of specific instances of a NOTIFICATION-TYPE. For example, a definition could specify that messages will not be sent more frequently than once every 60 seconds while the condition which led to the generation of the notification persists. Alternately, a NOTIFICATION-TYPE DESCRIPTION clause could provide a fixed limit on the number of messages sent over the duration of the condition leading to sending the notification.

有许多其他技术可用于减少不必要的通知类型信息的生成。在定义通知时,设计者可以在生成通知类型的特定实例时指定一些时间限制。例如,定义可以指定在导致生成通知的条件持续存在时,消息的发送频率不会超过每60秒一次。或者,通知类型描述子句可以对导致发送通知的条件持续期间发送的消息数量提供固定限制。

If NOTIFICATION-TYPE transmission is "aggregated" in some way - bounded either temporally or by absolute system state change as described above - the optimal design technique is to have the data delivered with the notification reference the actual number of underlying managed element transitions which brought about the notification. No matter which threshold is chosen to govern the

如果通知类型的传输以某种方式“聚合”,如上文所述,以时间或绝对系统状态变化为界限,则最佳设计技术是使与通知一起交付的数据参考产生通知的底层托管元素转换的实际数量。无论选择哪个阈值来管理

actual transmission of NOTIFICATION-TYPEs, the idea is to describe an aggregated event or related set of events in as few PDUs as possible.

在通知类型的实际传输中,其思想是在尽可能少的PDU中描述聚合事件或相关事件集。

3.10.3. Control of Notification Subsystem
3.10.3. 通知子系统的控制

There are standards track MIB modules that define objects that either augment or overlap control of notifications. For instance, FRAME-RELAY-DTE-MIB RFC 2115 defines frTrapMaxRate and DOCS-CABLE-DEVICE-MIB defines a set of objects in docsDevEvent that provide for rate limiting and filtering of notifications.

有一些标准跟踪MIB模块,这些模块定义了增强或重叠通知控制的对象。例如,FRAME-RELAY-DTE-MIB RFC 2115定义了frTrapMaxRate,DOCS-CABLE-DEVICE-MIB定义了docsdevent中的一组对象,用于限制速率和过滤通知。

In the past, agents did not have a standard means to configure a notification generator. With the availability of the SNMP-NOTIFICATION-MIB module in RFC 3413 [9], it is strongly recommended that the filtering functions of this MIB module be used. This MIB facilitates the mapping of given NOTIFICATION-TYPEs and their intended recipients.

在过去,代理没有配置通知生成器的标准方法。由于RFC 3413[9]中提供了SNMP-NOTITIONG-MIB模块,因此强烈建议使用此MIB模块的过滤功能。此MIB有助于映射给定的通知类型及其预期收件人。

If the mechanisms of the SNMP-NOTIFICATION-MIB are not suitable for this application, a explanation of why they are not suitable should be included in the DESCRIPTION clause of any replacement control objects.

如果SNMP-NOTIFICATION-MIB的机制不适用于此应用程序,则应在任何替换控制对象的说明条款中说明其不适用的原因。

3.11. Application Error Reporting
3.11. 应用程序错误报告

MIB module designers should not rely on the SNMP protocol error reporting mechanisms alone to report application layer error state for objects that accept SET operations.

MIB模块设计者不应仅依靠SNMP协议错误报告机制来报告接受SET操作的对象的应用层错误状态。

Most MIB modules that exist today provide very little detail as to why a configuration request has failed. Often the only information provided is via SNMP protocol errors which generally does not provide enough information about why an agent rejected a set request. Typically, there is an incumbent and sizable burden on the configuration application to determine if the configuration request failure is the result of a resource issue, a security issue, or an application error.

目前存在的大多数MIB模块很少提供配置请求失败原因的详细信息。通常,提供的唯一信息是通过SNMP协议错误,该错误通常无法提供有关代理拒绝set请求的原因的足够信息。通常,配置应用程序要确定配置请求失败是由资源问题、安全问题还是应用程序错误造成的,这是一个很大的负担。

Ideally, when a "badValue" error occurs for a given set request, an application can query the agent for more details on the error. A badValue does not necessarily mean the command generator sent bad data. An agent could be at fault. Additional detailed diagnostic information may aid in diagnosing conditions in the integrated system.

理想情况下,当给定集合请求发生“badValue”错误时,应用程序可以向代理查询有关错误的更多详细信息。badValue不一定意味着命令生成器发送了错误数据。可能是特工的错。附加的详细诊断信息可能有助于诊断集成系统中的状况。

Consider the requirement of conveying error information about a MIB expression 'object' set within the DISMAN-EXPRESSION-MIB [40] that occurs when the expression is evaluated. Clearly, none of the available protocol errors are relevant when reporting an error condition that occurs when an expression is evaluated. Instead, the DISMAN-EXPRESSION-MIB provides objects to report such errors (the expErrorTable). Instead, the expErrorTable maintains information about errors that occur at evaluation time:

考虑在表达式求值时发生的在表达式表达式MIB(40)内传递的MIB表达式“对象”集的错误信息的要求。显然,在报告计算表达式时发生的错误条件时,所有可用的协议错误都不相关。相反,DISMAN-EXPRESSION-MIB提供了报告此类错误的对象(expertable)。相反,Experrable会维护有关评估时发生的错误的信息:

expErrorEntry OBJECT-TYPE SYNTAX ExpErrorEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Information about errors in processing an expression. Entries appear in this table only when there is a matching expExpressionEntry and then only when there has been an error for that expression as reflected by the error codes defined for expErrorCode." INDEX { expExpressionOwner, expExpressionName }

expErrorEntry对象类型语法expErrorEntry MAX-ACCESS不可访问状态当前描述“有关处理表达式时出错的信息。只有当存在匹配的ExpExpExpressionEntry时,并且只有当该表达式出现错误(由为expErrorCode定义的错误代码反映)时,条目才会显示在此表中。“索引{ExpExpExpressionOwner,ExpExpExpressionName}”

More specifically, a MIB module can provide configuration applications with information about errors on the managed device by creating columnar object types in log tables that contain error information particular to errors that occur on row activation.

更具体地说,MIB模块可以通过在日志表中创建列式对象类型,为配置应用程序提供有关受管设备上的错误的信息,这些列式对象类型包含特定于行激活时发生的错误的错误信息。

Notifications with detailed failure information objects can also be used to signal configuration failures. If this approach is used, the configuration of destinations for NOTIFICATION-TYPE data generated from configuration failures should be considered independently of the those for other NOTIFICATION-TYPEs which are generated for other operational reasons. In other words, in many management environments, the network operators interested in NOTIFICATION-TYPEs generated from configuration failures may not completely overlap with the community of network operators interested in NOTIFICATION-TYPEs generated from, for example, network interface failures.

带有详细故障信息对象的通知也可用于表示配置故障。若使用此方法,则应将配置失败生成的通知类型数据的目的地配置独立于出于其他操作原因生成的其他通知类型的目的地配置。换句话说,在许多管理环境中,对配置故障生成的通知类型感兴趣的网络运营商可能不会与对例如网络接口故障生成的通知类型感兴趣的网络运营商社区完全重叠。

3.12. Designing MIB Modules for Multiple Managers
3.12. 为多个管理器设计MIB模块

When designing a MIB module for configuration, there are several pertinent considerations to provide support for multiple managers.

在设计用于配置的MIB模块时,有几个相关的注意事项可为多个管理器提供支持。

The first is to avoid any race conditions between two or more authorized management applications issuing SET protocol operations spanning over more than a single PDU.

第一种方法是避免两个或多个授权管理应用程序之间的任何竞争条件,这两个或多个授权管理应用程序发出跨多个PDU的SET协议操作。

The standard textual convention document [3] defines TestAndIncr, often called a spinlock, which is used to avoid race conditions.

标准文本约定文档[3]定义了TestAndIncr,通常称为自旋锁,用于避免竞争条件。

A MIB module designer may explicitly define a synchronization object of syntax TestAndIncr or may choose to rely on snmpSetSerialNo (a global spinlock object) as defined in SNMPv2-MIB.

MIB模块设计器可以显式定义语法TestAndIncr的同步对象,或者可以选择依赖SNMPv2 MIB中定义的snmpSetSerialNo(全局自旋锁对象)。

snmpSetSerialNo OBJECT-TYPE SYNTAX TestAndIncr MAX-ACCESS read-write STATUS current DESCRIPTION "An advisory lock used to allow several cooperating command generator applications to coordinate their use of the SNMP set operation.

snmpSetSerialNo对象类型语法TestAndIncr MAX-ACCESS读写状态当前描述“一种建议锁,用于允许多个协同的命令生成器应用程序协调它们对SNMP集操作的使用。

           This object is used for coarse-grain coordination.
           To achieve fine-grain coordination, one or more similar
           objects might be defined within each MIB group, as
           appropriate."
   ::= { snmpSet 1 }
        
           This object is used for coarse-grain coordination.
           To achieve fine-grain coordination, one or more similar
           objects might be defined within each MIB group, as
           appropriate."
   ::= { snmpSet 1 }
        

Another prominent TestAndIncr example can be found in the SNMP-TARGET- MIB [9], snmpTargetSpinLock.

另一个突出的TestAndIncr示例可以在SNMP-TARGET-MIB[9]中找到,snmpTargetSpinLock。

Secondly, an agent should be able to report configuration as set by different entities as distinguishable from configuration defined external to the SNMP domain, such as application of a default or through an alternate management interface like a command line interface. Section 3.10.1 describes considerations for this practice when designing NOTIFICATION-TYPEs. The OwnerString textual convention from RMON-MIB RFC 2819 [32] has been used successfully for this purpose. More recently, RFC 3411 [1] introduced the SnmpAdminString which has been designed as a UTF8 string. This is more suitable for representing names in many languages.

其次,代理应该能够报告由不同实体设置的配置,以区别于SNMP域外部定义的配置,例如应用默认配置或通过备用管理界面(如命令行界面)。第3.10.1节描述了设计通知类型时的注意事项。RMON-MIB RFC 2819[32]中的OwnerString文本约定已成功用于此目的。最近,RFC 3411[1]引入了SNMPAdministring,它被设计为UTF8字符串。这更适合用多种语言表示名称。

Experience has shown that usage of OwnerString to represent row ownership can be a useful diagnostic tool as well. Specifically, the use of the string "monitor" to identify configuration set by an agent/local management has been prevalent and useful in applications.

经验表明,使用OwnerString表示行所有权也可以是一个有用的诊断工具。具体地说,使用字符串“monitor”来标识由代理/本地管理设置的配置在应用程序中非常普遍和有用。

Thirdly, consider whether there is a need for multiple managers to configure the same set of tables. If so, an "OwnerString" may be used as the first component of a table's index to allow VACM to be used to protect access to subsets of rows, at least at the level of securityName or groupName provided. RFC 3231 [25], Section 6 presents this technique in detail. This technique does add complexity to the managed device and to the configuration management application since the manager will need to be aware of these additional columnar objects in configuration tables and act appropriately to set them. Additionally, the agent must be

第三,考虑是否需要多个管理器来配置同一组表。如果是这样,“OwnerString”可以用作表索引的第一个组件,以允许使用VACM保护对行子集的访问,至少在提供的securityName或groupName级别。RFC 3231[25],第6节详细介绍了该技术。这种技术确实增加了受管设备和配置管理应用程序的复杂性,因为管理器需要知道配置表中的这些附加列对象,并采取适当的行动来设置它们。此外,代理必须是

configured to provide the appropriate instance-level restrictions on the modifiability of the instances.

配置为对实例的可修改性提供适当的实例级别限制。

3.13. Other MIB Module Design Issues
3.13. 其他MIB模块设计问题
3.13.1. Octet String Aggregations
3.13.1. 八位组字符串聚合

The OCTET STRING syntax can be used as an extremely flexible and useful datatype when defining managed objects that allow SET operation. An octet string is capable of modeling many things and is limited in size to 65535 octets by SMIv2[2].

在定义允许集合操作的托管对象时,八位字节字符串语法可以用作非常灵活和有用的数据类型。八位字节字符串能够对许多事情进行建模,SMIv2将其大小限制为65535个八位字节[2]。

Since OCTET STRINGS are very flexible, the need to make them useful to applications requires careful definition. Otherwise, applications will at most simply be able to display and set them.

由于八位字节字符串非常灵活,因此需要仔细定义,使其对应用程序有用。否则,应用程序最多只能显示和设置它们。

Consider the following object from RFC 3418 SNMPv2-MIB [11].

从RFC 3418 SNMPv2 MIB(11)中考虑以下对象。

   sysLocation OBJECT-TYPE
   SYNTAX      DisplayString (SIZE (0..255))
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
           "The physical location of this node (e.g., `telephone
           closet, 3rd floor').  If the location is unknown, the value
           is the zero-length string."
   ::= { system 6 }
        
   sysLocation OBJECT-TYPE
   SYNTAX      DisplayString (SIZE (0..255))
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
           "The physical location of this node (e.g., `telephone
           closet, 3rd floor').  If the location is unknown, the value
           is the zero-length string."
   ::= { system 6 }
        

Such informational object types have come to be colloquially known as "scratch pad objects". While often useful, should an application be required to do more with this information than be able to read and set the value of this object, a more precise definition of the contents of the OCTET STRING is needed, since the actual format of an instance for such an object is unstructured. Hence, alternatively, dividing the object type into several object type definitions can provide the required additional structural detail.

这种信息对象类型通俗地称为“便笺簿对象”。虽然通常很有用,但如果应用程序需要更多地处理此信息,而不是读取和设置此对象的值,则需要更精确地定义八位字节字符串的内容,因为此类对象实例的实际格式是非结构化的。因此,或者,将对象类型划分为多个对象类型定义可以提供所需的额外结构细节。

When using OCTET STRINGS, avoid platform dependent data formats. Also avoid using OCTET STRINGS where a more precise SMI syntax such as SnmpAdminString or BITS would work.

使用八位字节字符串时,避免使用依赖于平台的数据格式。另外,在使用更精确的SMI语法(如SnmpAdminString或BITS)的情况下,请避免使用八位字符串。

There are many MIB modules that attempt to optimize the amount of data sent/received in a SET/GET PDU by packing octet strings with aggregate data. For example, the PortList syntax as defined in the Q-BRIDGE-MIB (RFC 2674 [26]) is defined as follows:

有许多MIB模块试图通过使用聚合数据打包八位字节字符串来优化SET/GET PDU中发送/接收的数据量。例如,Q-BRIDGE-MIB(RFC 2674[26])中定义的端口列表语法定义如下:

   PortList ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "Each octet within this value specifies a set of eight
        ports, with the first octet specifying ports 1 through
        8, the second octet specifying ports 9 through 16, etc.
        Within each octet, the most significant bit represents
        the lowest numbered port, and the least significant bit
        represents the highest numbered port.  Thus, each port
        of the bridge is represented by a single bit within the
        value of this object.  If that bit has a value of '1'
        then that port is included in the set of ports; the port
        is not included if its bit has a value of '0'."
    SYNTAX      OCTET STRING
        
   PortList ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "Each octet within this value specifies a set of eight
        ports, with the first octet specifying ports 1 through
        8, the second octet specifying ports 9 through 16, etc.
        Within each octet, the most significant bit represents
        the lowest numbered port, and the least significant bit
        represents the highest numbered port.  Thus, each port
        of the bridge is represented by a single bit within the
        value of this object.  If that bit has a value of '1'
        then that port is included in the set of ports; the port
        is not included if its bit has a value of '0'."
    SYNTAX      OCTET STRING
        

This compact representation saves on data transfer but has some limitations. Such complex instance information is difficult to reference outside of the object or use as an index to a table. Additionally, with this approach, if a value within the aggregate requires change, the entire aggregated object instance must be written.

这种紧凑的表示方式节省了数据传输,但有一些限制。这种复杂的实例信息很难在对象外部引用或用作表的索引。此外,使用这种方法,如果聚合中的值需要更改,则必须写入整个聚合对象实例。

Providing an SNMP table to represent aggregate data avoids the limitations of encoding data into OCTET STRINGs and is thus the better general practice.

提供SNMP表来表示聚合数据避免了将数据编码为八位字节字符串的限制,因此是更好的一般做法。

Finally, as previously mentioned in Section 3.3.6.3, one should consider the practical ramifications of instance transfer for object types of SYNTAX OCTET STRING where they have typical instance data requirements close to the upper boundary of SMIv2 OCTET STRING instance encoding. Where such object types are truly necessary at all, SNMP/UDP may not be a very scalable means of transfer and alternatives should be explored.

最后,正如前面在3.3.63.3节中提到的,我们应该考虑实例转移对于语法八位字节字符串对象类型的实际影响,其中它们具有接近SMIV2八位字节字符串实例编码的上边界的典型实例数据要求。如果确实需要这样的对象类型,那么SNMP/UDP可能不是一种非常可扩展的传输方式,应该探索替代方法。

3.13.2. Supporting multiple instances of a MIB Module
3.13.2. 支持MIB模块的多个实例

When defining new MIB modules, one should consider if there could ever be multiple instances of this MIB module in a single SNMP entity.

当定义新的MIB模块时,应该考虑在单个SNMP实体中是否存在MIB模块的多个实例。

MIB modules exist that assume a one to many relationship, such as MIBs for routing protocols which can accommodate multiple "processes" of the underlying protocol and its administrative framework. However, the majority of MIB modules assume a one-to-one relationship between the objects found in the MIB module and how many instances will exist on a given SNMP agent. The OSPF-MIB, IP-MIB, BRIDGE-MIB are all examples that are defined for a single instance of the technology.

MIB模块采用一对多关系,例如路由协议的MIB,它可以容纳基础协议及其管理框架的多个“进程”。但是,大多数MIB模块都假定在MIB模块中找到的对象与给定SNMP代理上存在的实例数之间存在一对一的关系。OSPF-MIB、IP-MIB、BRIDGE-MIB都是为该技术的单个实例定义的示例。

It is clear that single instancing of these MIB modules limits implementations that might support multiple instances of OSPF, IP stacks or logical bridges.

显然,这些MIB模块的单实例限制了可能支持OSPF、IP堆栈或逻辑网桥的多个实例的实现。

In such cases, the ENTITY-MIB [RFC2737] can provide a means for supporting the one-to-many relationship through naming scopes using the entLogicalTable. Keep in mind, however, that there are some drawbacks to this approach.

在这种情况下,ENTITY-MIB[RFC2737]可以通过使用entLogicalTable命名作用域来提供支持一对多关系的方法。但是,请记住,这种方法有一些缺点。

1) One cannot issue a PDU request that spans naming scopes. For example, given two instances of BRIDGE-MIB active in a single agent, one PDU cannot contain a request for dot1dBaseNumPorts from both the first and second instances.

1) 不能发出跨越命名范围的PDU请求。例如,如果一个代理中有两个BRIDGE-MIB实例处于活动状态,则一个PDU不能同时包含来自第一个和第二个实例的dot1dBaseNumPorts请求。

2) Reliance on this technique creates a dependency on the Entity MIB for an application to be able to access multiple instances of information.

2) 对这种技术的依赖会创建对实体MIB的依赖,使应用程序能够访问多个信息实例。

Alternately, completely independently of the Entity MIB, multiple MIB module instances can be scoped by different SNMP contexts. This does, however, require the coordination of this technique with the administrative establishment of contexts in the configured agent system.

或者,完全独立于实体MIB,多个MIB模块实例可以由不同的SNMP上下文确定范围。然而,这确实需要将此技术与配置的代理系统中上下文的管理建立相协调。

3.13.3. Use of Special Optional Clauses
3.13.3. 特别任择条款的使用

When defining integer-based objects for read-create, read-write and read-only semantics, using the UNITS clause is recommended in addition to specification in the DESCRIPTION clause of any particular details of how UNITs are to be interpreted.

在为读-创建、读-写和只读语义定义基于整数的对象时,除了在DESCRIPTION子句中指定如何解释单元的任何特定细节外,建议使用UNITS子句。

The REFERENCE clause is also recommended as a way to help an implementer track down related information on a given object. By adding a REFERENCE clause to the specific underlying technology document, multiple separate implementations will be more likely to interoperate.

还建议使用REFERENCE子句来帮助实现者跟踪给定对象上的相关信息。通过向特定的底层技术文档添加引用子句,多个单独的实现将更有可能实现互操作。

4. Implementing SNMP Configuration Agents
4. 实现SNMP配置代理
4.1. Operational Consistency
4.1. 操作一致性

Successful deployment of SNMP configuration systems depends on understanding the roles of MIB module design and agent design.

SNMP配置系统的成功部署取决于理解MIB模块设计和代理设计的作用。

Both module and agent design need to be undertaken with an understanding of how UDP/IP-based SNMP behaves. A current practice in MIB design is to consider the idempotency of settable objects. Idempotency basically means being able to invoke the same set operation repeatedly but resulting in only a single activation.

模块和代理设计都需要了解基于UDP/IP的SNMP的行为。MIB设计的一个目前的实践是考虑可设置对象的幂等性。幂等性基本上意味着能够重复调用相同的集合操作,但只导致一次激活。

Here is an example of the idempotency in action:

下面是一个幂等性的例子:

Manager                              Agent
--------                             ------
Set1 (Object A, Value B) --->        receives set OK and responds
                          X<-------- Response PDU(OK) is dropped by
                                     network
Manager times out
and sends again
Set2 (Object A, Value B) --->       receives set OK (does nothing),
                                    responds
                          <-------- with a Response PDU(OK)
Manager receives OK
        
Manager                              Agent
--------                             ------
Set1 (Object A, Value B) --->        receives set OK and responds
                          X<-------- Response PDU(OK) is dropped by
                                     network
Manager times out
and sends again
Set2 (Object A, Value B) --->       receives set OK (does nothing),
                                    responds
                          <-------- with a Response PDU(OK)
Manager receives OK
        

Had object A been defined in a stateful way, the set operation might have caused the Set2 operation to fail as a result of interaction with Set1. If the agent implementation is not aware of such a possible situation on the second request, the agent may behave poorly by performing the set request again rather than doing nothing.

如果对象A是以有状态的方式定义的,则set操作可能会导致Set2操作由于与Set1的交互而失败。如果代理实现在第二个请求上没有意识到这种可能的情况,那么代理可能会通过再次执行set请求而不是什么都不做来表现不佳。

The example above shows that all of the software that runs on a managed element and in managed applications should be designed in concert when possible. Particular emphasis should be placed at the logical boundaries of the management system components in order to ensure correct operation.

上面的示例表明,在托管元素上和托管应用程序中运行的所有软件都应该尽可能协同设计。应特别强调管理系统组件的逻辑边界,以确保正确运行。

1. The first interface is between SNMP agents in managed devices and the management applications themselves. The MIB document is a contract between these two entities that defines expected behavior - it is a type of API.

1. 第一个接口是受管设备中的SNMP代理和管理应用程序本身之间的接口。MIB文档是这两个实体之间定义预期行为的契约——它是一种API类型。

2. The second interface is between the agent and the instrumented subsystem. In some cases, the instrumented subsystem will require modification to allow for the dynamic nature of SNMP-based configuration, control and monitoring operations. Agent implementors must also be sensitive to the operational code and device in order to minimize the impact of management on the primary subsystems.

2. 第二个接口是代理和检测子系统之间的接口。在某些情况下,仪表化子系统将需要修改,以允许基于SNMP的配置、控制和监视操作的动态特性。代理实现者还必须对操作代码和设备敏感,以便将管理对主要子系统的影响降至最低。

Additionally, while the SNMP protocol-level and MIB module-level modeling of configuration operations may be idempotent and stateless from one set operation to another, it may not be that way in the

此外,尽管配置操作的SNMP协议级和MIB模块级建模可能是从一个集合操作到另一个集合操作的幂等和无状态建模,但在应用程序中可能不是这样

underlying subsystem. It is possible that an agent may need to manage this state in these subsystem architectures explicitly when it has placed the underlying subsystem into an "intermediate" state at a point in processing a series of SET PDUs. Alternatively, depending on the underlying subsystem in question, the agent may be able to buffer all of the configuration set operations prior to activating them in the subsystem all at once (to accommodate the nature of the subsystem).

底层子系统。当代理在处理一系列设置的PDU时,将底层子系统置于“中间”状态时,可能需要在这些子系统体系结构中显式管理此状态。或者,根据所讨论的底层子系统,代理可以在一次在子系统中激活所有配置集操作之前缓冲所有配置集操作(以适应子系统的性质)。

As an example, it would be reasonable to define a MIB module to control Virtual Private Network (VPN) forwarding, in which a management station could set a set of ingress/egress IP addresses for the VPN gateway. Perhaps the MIB module presumes that the level of transactionality is the establishment of a single row in a table defining the address of the ingress/egress gateway, along with some prefix information to assist in routing at the VPN layer to that gateway. However, it would be conceivable that in an underlying Layer 2 VPN subsystem instrumentation, the requirement is that all existing gateways for a VPN be deleted before a new one can be defined--that, in other words, in order to add a new gateway, g(n), to a VPN, gateways g(1)..g(n-1) need to be removed, and then all n gateways reestablished with the VPN forwarding service. In this case, one could imagine an agent which has some sort of timer to establish a bounded window for receipt of SETs for new VPN gateways, and to activate them in this removal-then-reestablishment of existing and new gateways at the end of this window.

例如,定义MIB模块来控制虚拟专用网(VPN)转发是合理的,其中管理站可以为VPN网关设置一组入口/出口IP地址。也许MIB模块假定事务性级别是在定义入口/出口网关地址的表中建立一行,以及一些前缀信息,以帮助在VPN层路由到该网关。然而,可以想象,在底层第2层VPN子系统检测中,要求在定义新网关之前删除VPN的所有现有网关——换句话说,为了向VPN添加新网关g(n),需要删除网关g(1)…g(n-1),然后使用VPN转发服务重新建立所有n个网关。在这种情况下,可以想象一个代理,它有某种计时器来建立一个有界窗口,用于接收新VPN网关的集合,并在此移除中激活它们,然后在此窗口结束时重新建立现有和新网关。

4.2. Handling Multiple Managers
4.2. 处理多个经理

Devices are often modified by multiple management entities and with different management techniques. It is sometimes the case that an element is managed by different organizations such as when a device sits between administrative domains.

设备通常由多个管理实体使用不同的管理技术进行修改。有时,元素由不同的组织管理,例如,当设备位于管理域之间时。

There are a variety of approaches that management software can use to ensure synchronization of information between the manager(s) and the managed elements.

管理软件可以使用多种方法来确保管理器和被管理元素之间的信息同步。

An agent should report configuration changes performed by different entities. It should also distinguish configuration defined locally such as a default or locally specified configuration made through an alternate management interface such as a command line interface. When a change has been made to the system via SNMP, CLI, or other method, a managed element should send an notification to the manager(s) configured as recipients of these applicable notifications. These management applications should update their

代理应报告由不同实体执行的配置更改。它还应区分本地定义的配置,如默认配置或通过备用管理界面(如命令行界面)进行的本地指定配置。当通过SNMP、CLI或其他方法对系统进行更改时,托管元素应向配置为这些适用通知接收者的管理器发送通知。这些管理应用程序应更新其

local configuration repositories and then take whatever additional action is appropriate. This approach can also be an early warning of undesired configuration changes.

本地配置存储库,然后采取任何适当的附加操作。此方法还可以作为意外配置更改的早期警告。

Managers should also develop mechanisms to ensure that they are synchronized with each other.

管理者还应制定机制,确保它们彼此同步。

4.3. Specifying Row Modifiability
4.3. 指定行可修改性

Once a RowStatus value is active(1) for a given row, the management application should be able to determine what the semantics are for making additional changes to a row. The RMON MIB control table objects spell out explicitly what managed objects in a row can and cannot be changed once a given RowStatus goes active.

一旦给定行的RowStatus值处于活动状态(1),管理应用程序应该能够确定对行进行其他更改的语义。RMON MIB控制表对象明确说明,一旦给定的RowStatus变为活动状态,行中哪些受管对象可以更改,哪些不可以更改。

As described earlier, some operations take some time to complete. Some systems also require that they remain in a particular state for some period before moving to another. In some cases, a change to one value may require re-initialization of the system. In all of these cases, the DESCRIPTION clause should contain information about requirements of the managed system and special restrictions that managers should observe.

如前所述,某些操作需要一些时间才能完成。一些系统还要求它们在移动到另一个状态之前,在特定状态下保持一段时间。在某些情况下,更改一个值可能需要重新初始化系统。在所有这些情况下,描述条款应包含有关管理系统的要求以及管理者应遵守的特殊限制的信息。

4.4. Implementing Write-only Access Objects
4.4. 实现只写访问对象

The second version of the SNMP SMI dropped direct support for a write-only object. It is therefore necessary to return something when reading an object that you may have wished to have write-only semantics. Such objects should have a DESCRIPTION clause that details what the return values should be. However, regardless of the approach, the value returned when reading the object instance should be meaningful in the context of the object's semantics.

SNMP SMI的第二个版本放弃了对只写对象的直接支持。因此,在读取对象时,有必要返回您可能希望具有纯写语义的内容。这样的对象应该有一个描述子句,详细说明返回值应该是什么。但是,无论采用何种方法,读取对象实例时返回的值在对象语义上下文中都应该是有意义的。

5. Designing Configuration Management Software
5. 配置管理软件的设计

In this section, we describe practices that should be used when creating and deploying management software that configures one or more systems using SNMP. Functions all configuration management software should provide, regardless of the method used to convey configuration information to the managed systems are backup, fail-over, and restoration. A management system should have the following features:

在本节中,我们将介绍在创建和部署使用SNMP配置一个或多个系统的管理软件时应使用的实践。所有配置管理软件应提供的功能包括备份、故障转移和恢复,无论用于向受管系统传输配置信息的方法是什么。管理系统应具有以下特征:

1. A method for restoring a previous configuration to one or more devices. Ideally this restoration should be time indexed so that a network can be restored to a configured state as of a specific time and date.

1. 将以前的配置恢复到一个或多个设备的方法。理想情况下,此恢复应为时间索引,以便可以将网络恢复到特定时间和日期的配置状态。

2. A method for saving back up versions of the configuration data in case of hardware or software failure.

2. 一种在硬件或软件出现故障时保存配置数据备份版本的方法。

3. A method of providing fail-over to a secondary (management) system in case of a primary failure. This capability should be deployed in such a way that it does not cause duplicate polling of configuration.

3. 一种在主系统发生故障时向辅助(管理)系统提供故障转移的方法。此功能的部署方式应确保不会导致配置的重复轮询。

These three capabilities are of course important for other types of management that are not the focus of this BCP.

当然,这三种能力对于本BCP不关注的其他类型的管理非常重要。

5.1. Configuration Application Interactions with Managed Systems
5.1. 配置应用程序与托管系统的交互

From the point of view of the design of the management application, there are three basic requirements to evaluate relevant to SNMP protocol operations and configuration:

从管理应用程序设计的角度来看,需要评估与SNMP协议操作和配置相关的三个基本要求:

o Set and configuration activation operations

o 设置和配置激活操作

o Notifications from the device

o 来自设备的通知

o Data retrieval and collection

o 数据检索和收集

Depending on the requirements of the specific services being configured, many other requirements may, and probably will, also be present.

根据所配置的特定服务的需求,可能也会出现许多其他需求。

The design of the system should not assume that the objects in a device that represent configuration data will remain unchanged over time.

系统的设计不应假定设备中表示配置数据的对象将随时间保持不变。

As standard MIB modules evolve and vendors add private extensions, the specific configuration parameters for a given operation are likely to change over time. Even in the case of a configuration application that is designed for a single vendor, the management application should allow for variability in the MIB objects that will be used to configure the device for a particular purpose. The best method to accomplish this is by separating, as much as possible, the operational semantics of a configuration operation from the actual data. One way that some applications achieve this is by having the specific configuration objects that are associated with a particular device be table driven rather than hard coded. Ideally, management software should verify the support in the devices it is expected to manage and report any unexpected deviations to the operator. This approach is particularly valuable when developing applications that are intended to support equipment or software from multiple vendors.

随着标准MIB模块的发展和供应商添加私有扩展,给定操作的特定配置参数可能会随着时间的推移而改变。即使是针对单个供应商设计的配置应用程序,管理应用程序也应允许MIB对象中的可变性,这些对象将用于为特定目的配置设备。实现这一点的最佳方法是尽可能地将配置操作的操作语义与实际数据分离。一些应用程序实现这一点的一种方法是,将与特定设备关联的特定配置对象设置为表驱动,而不是硬编码。理想情况下,管理软件应验证其预期管理的设备中的支持,并向操作员报告任何意外偏差。当开发旨在支持多个供应商的设备或软件的应用程序时,这种方法尤其有价值。

5.1.1. SET Operations
5.1.1. 集合运算

Management software should be mindful of the environment in which SET operations are being deployed. The intent here is to move configuration information as efficiently as possible to the managed device. There are many ways to achieve efficiency and some are specific to given devices. One general case that all management software should employ is to reduce the number of SET PDU exchanges between the managed device and the management software to the smallest reasonable number. One approach to this is to verify the largest number of variable bindings that can fit into a SET PDU for a managed device. In some cases, the number of variable bindings to be sent in a particular PDU will be influenced by the device, the specific MIB objects and other factors.

管理软件应注意正在部署SET操作的环境。此处的目的是尽可能高效地将配置信息移动到受管设备。实现效率的方法有很多种,有些是特定于给定设备的。所有管理软件应采用的一种一般情况是将受管设备和管理软件之间的设置PDU交换次数减少到最小的合理数量。实现这一点的一种方法是验证可容纳到托管设备的一组PDU中的最大数量的变量绑定。在某些情况下,在特定PDU中发送的变量绑定数量将受到设备、特定MIB对象和其他因素的影响。

Maximizing the number of variable bindings in a SET PDU also has benefits in the area of management application transaction initiation, as we will discuss in the following section.

在一组PDU中最大化变量绑定的数量在管理应用程序事务启动方面也有好处,我们将在下一节中讨论。

There are, though, agents that may have implementation limitations on the number and order of varbinds they can handle in a single SET PDU. In this case, sending fewer varbinds will be necessary.

不过,代理在单个PDU集中可以处理的变量绑定的数量和顺序上可能存在实现限制。在这种情况下,需要发送更少的varbind。

As stated at the outset of this section, the management application software designer must be sensitive to the design of the SNMP software in the managed device. For example, the software in the managed device may require that all that all related configuration information for an operation be conveyed in a single PDU because it has no concept of a transaction beyond a single SNMP PDU. Another example has to do with the RowStatus textual convention. Some SNMP agents implement a subset of the features available and as such the management application must avoid using features that may not be supported in a specific table implementation (such as createAndWait).

如本节开头所述,管理应用程序软件设计师必须对受管设备中SNMP软件的设计敏感。例如,受管设备中的软件可能要求在单个PDU中传输操作的所有相关配置信息,因为它没有超出单个SNMP PDU的事务概念。另一个例子与RowStatus文本约定有关。某些SNMP代理实现可用功能的子集,因此管理应用程序必须避免使用特定表实现中可能不支持的功能(如createAndWait)。

5.1.2. Configuration Transactions
5.1.2. 配置事务

There are several types of configuration transactions that can be supported by SNMP-based configuration applications. They include transactions on a scalar object, transactions in a single table (within and across row instances), transactions across several tables in a managed device and transactions across many devices. The manager's ability to support these different transactions is partly dependent on the design of the MIB objects used in the configuration operation.

基于SNMP的配置应用程序可以支持几种类型的配置事务。它们包括标量对象上的事务、单个表中的事务(行实例内和跨行实例)、托管设备中多个表之间的事务以及多个设备之间的事务。管理器支持这些不同事务的能力部分取决于配置操作中使用的MIB对象的设计。

To make use of any kind of transaction semantics effectively, SNMP management software must be aware of the information in the MIB modules that it is to configure so that it can effectively utilize

为了有效地利用任何类型的事务语义,SNMP管理软件必须了解要配置的MIB模块中的信息,以便能够有效地利用这些信息

RowStatus objects for the control of transactions on one or more tables. Such software must also be aware of control tables that the device supports that are used to control the status of one or more other tables.

RowStatus对象,用于控制一个或多个表上的事务。此类软件还必须了解设备支持的用于控制一个或多个其他表的状态的控制表。

To the greatest extent possible, the management application should provide the facility to support transactions across multiple devices. This means that if a configuration operation is desired across multiple devices, the manager can coordinate these configuration operations such that they become active as close to simultaneously as possible.

管理应用程序应尽可能提供支持跨多个设备的事务的工具。这意味着,如果需要跨多个设备执行配置操作,管理器可以协调这些配置操作,使它们尽可能同时处于活动状态。

Several practical means are present in the SNMP model that support management application level transactions. One was mentioned in the preceding section, that transactions can be optimized by including the maximum number of SET variable bindings possible in a single PDU sent to the agent.

SNMP模型中提供了几种支持管理应用程序级事务的实用方法。前一节提到,可以通过在发送到代理的单个PDU中包含最大数量的SET变量绑定来优化事务。

There is an important refinement to this. The set of read-create row data objects for tables should be sent in a single PDU, and only placed across multiple PDUs if absolutely necessary. The success of these set operations should be verified through the response(s) to the Set PDU or subsequent polling of the row data objects. The applicable RowStatus object(s), may be set to active only after this verification. This is the only tractable means of affording an opportunity for per-row rollback, particularly when the configuration change is across table row instances on multiple managed devices.

这方面有一个重要的改进。表的读-创建行数据对象集应在单个PDU中发送,并且仅在绝对必要时跨多个PDU放置。应通过对set PDU的响应或随后对行数据对象的轮询来验证这些set操作的成功。只有在此验证之后,才能将适用的RowStatus对象设置为活动。这是为每行回滚提供机会的唯一可行方法,特别是当配置更改跨多个受管设备上的表行实例时。

Finally, where a MIB module exposes the kind of helpful transaction management object types that were discussed in Section 3.3.5, it is clearly beneficial to the integrity of the management application's capacity to handle transactions to make use of them.

最后,如果MIB模块公开了第3.3.5节中讨论的有用的事务管理对象类型,则显然有助于管理应用程序处理事务的能力的完整性,以利用它们。

5.1.3. Tracking Configuration Changes
5.1.3. 跟踪配置更改

As previously described in Section 3.3.5 (Summary Objects and State Tracking), agents should provide the capability for notifications to be sent to their configured management systems whenever a configuration operation is completed or is detected to have failed. The management application must be prepared to accept these notifications so that it knows the current configured state of the devices under its control. Upon receipt of the notification, the management application should use getBulk or getNext to retrieve the configuration from the agent and store the relevant contents in the management application database. The GetBulkRequest-PDU is useful for this whenever supported by the managed device, since it is more efficient than the GetNextRequest-PDU when retrieving large amounts

如前面第3.3.5节(摘要对象和状态跟踪)所述,当配置操作完成或检测到失败时,代理应提供向其配置的管理系统发送通知的功能。管理应用程序必须准备好接受这些通知,以便了解其控制下设备的当前配置状态。收到通知后,管理应用程序应使用getBulk或getNext从代理检索配置,并将相关内容存储在管理应用程序数据库中。无论何时受管理设备支持,GetBulkRequest PDU都非常有用,因为在检索大量数据时,它比GetNextRequest PDU更高效

of data. For the purposes of backward compatibility, the management station should also support and make use of the GetNextRequest-PDU when the agent does not support the GetBulkRequest-PDU.

大量的数据。为了向后兼容,当代理不支持GetBulkRequest PDU时,管理站还应该支持并使用GetNextRequest PDU。

Management systems should also provide configuration options with defaults for users that tend to retrieve the smallest amount of data to achieve the particular goal of the application, to avoid unnecessary load on managed devices for the most common retrieval operations.

管理系统还应为倾向于检索最小数据量的用户提供默认配置选项,以实现应用程序的特定目标,从而避免对最常见检索操作的受管设备施加不必要的负载。

5.1.4. Scalability of Data Retrieval
5.1.4. 数据检索的可扩展性

The techniques for efficient data retrieval described in the preceding sections comprise only one aspect of what application developers should consider in this regard when developing configuration applications. Management applications should provide for distributed processing of the configuration operations. This also extends to management functions that are not the focus of this document. Techniques of distributed processing can also be used to provide resilience in the case of network failures. An SNMP-based configuration management system might be deployed in a distributed fashion where three systems in different locations keep each other synchronized. This synchronization can be accomplished without additional polling of network devices through a variety of techniques. In the case of a failure, a 'backup' system can take over the configuration responsibilities from the failed manager without having to re-synchronize with the managed elements since it will already be up to date.

在前面的部分中描述的高效数据检索技术仅包括应用程序开发人员在开发配置应用程序时在这方面考虑的一个方面。管理应用程序应提供配置操作的分布式处理。这也扩展到了本文件不关注的管理职能。分布式处理技术也可用于在网络故障情况下提供恢复能力。基于SNMP的配置管理系统可能以分布式方式部署,其中位于不同位置的三个系统彼此保持同步。这种同步可以通过各种技术在不需要额外轮询网络设备的情况下完成。在发生故障的情况下,“备份”系统可以从发生故障的管理器接管配置责任,而无需与受管元件重新同步,因为它已经是最新的。

6. Deployment and Security Issues
6. 部署和安全问题

Now that we have considered the design of SNMP MIB data for configuration, agent implementation of its access, and management application issues in configuration using SNMP, we turn to a variety of operational considerations which transcend all three areas.

现在,我们已经考虑了用于配置的SNMP MIB数据的设计、其访问的代理实现,以及使用SNMP进行配置时的管理应用程序问题,接下来我们将讨论超越所有三个领域的各种操作注意事项。

6.1. Basic assumptions about Configuration
6.1. 关于配置的基本假设

The following basic assumptions are made about real world configuration models.

以下是关于真实世界配置模型的基本假设。

1) Operations must understand and must be trained in the operation of a given technology. No configuration system can prevent an untrained operator from causing outages due to misconfiguration.

1) 操作人员必须了解并接受特定技术操作方面的培训。任何配置系统都无法防止未经培训的操作员因配置错误而导致停机。

2) Systems undergoing configuration changes must be able to cope with unexpected loss of communication at any time.

2) 正在进行配置更改的系统必须能够随时应对意外的通信丢失。

During configuration operations, network elements must take appropriate measures to leave the configuration in a consistent/recognizable state by either rolling back to a previously valid state or changing to a well-defined or default state.

在配置操作期间,网元必须采取适当措施,通过回滚到以前的有效状态或更改为定义良好的或默认状态,使配置保持在一致/可识别的状态。

3) Configuration exists on a scale from relatively unchanging to a high volume, high rate of change. The former is often referred to as "set and forget" to indicate that the configuration changes quite infrequently. The latter, "near real-time change control" implies a high frequency of configuration change. Design of configuration management must take into account the rate and volume of change expected in a given configuration subsystem.

3) 配置存在于从相对不变到高容量、高变化率的范围内。前者通常被称为“设置并忘记”,表示配置很少更改。后者,“近实时变更控制”意味着配置变更的频率很高。配置管理的设计必须考虑给定配置子系统中预期的变化率和变化量。

6.2. Secure Agent Considerations
6.2. 安全代理注意事项

Vendors should not ship a device with a community string 'public' or 'private', and agents should not define default community strings except when needed to bootstrap devices that do not have secondary management interfaces. Defaults lead to security issues that have been recognized and exploited. When using SNMPv1, supporting read-only community strings is a common practice.

供应商不应提供带有社区字符串“public”或“private”的设备,并且代理不应定义默认社区字符串,除非需要引导没有辅助管理接口的设备。默认设置会导致已被识别和利用的安全问题。使用SNMPv1时,支持只读社区字符串是一种常见做法。

Version 3 of the SNMP represents the current standard for the Internet Management Framework and is recommended for all network management applications. In particular, SNMPv3 provides authorization, authentication, and confidentiality protection and is essential to meeting the security considerations for all management of devices that support SNMP-based configuration.

SNMP版本3代表了Internet管理框架的当前标准,建议用于所有网络管理应用程序。特别是,SNMPv3提供授权、身份验证和机密性保护,对于满足支持基于SNMP配置的所有设备管理的安全考虑至关重要。

6.3. Authentication Notifications
6.3. 身份验证通知

The default state of RFC 1215 [17] Authentication notifications should be off. One does not want to risk accidentally sending out authentication failure information, which by itself could constitute a security liability. Enabling authentication Notifications should be done in the context of a management security scheme which considers the proper recipients of this information.

RFC 1215[17]身份验证通知的默认状态应为关闭。人们不希望冒意外发送身份验证失败信息的风险,这本身就可能构成安全责任。启用身份验证通知应在考虑此信息的适当收件人的管理安全方案的上下文中进行。

There are other liabilities where authentication notifications are generated without proper security infrastructure. When notifications are sent in SNMPv1 trap PDUs, unsolicited packets to a device can causes one or more trap PDUs to be created and sent to management stations. If these traps flow on shared access media and links, the community string from the trap may be gleaned and exploited to gain access to the device. At the very least, this risk should be mitigated by having the authentication trap PDU be conveyed with a

在没有适当的安全基础设施的情况下生成身份验证通知还有其他责任。当在SNMPv1陷阱PDU中发送通知时,发送到设备的未经请求的数据包会导致创建一个或多个陷阱PDU并发送到管理站。如果这些陷阱在共享访问介质和链接上流动,则可能会收集并利用陷阱中的社区字符串来访问设备。至少,应该通过将身份验证陷阱PDU与

community string which is only used for authentication traps from the agent, and would be useless for access inbound to the agent to get at other management data.

社区字符串,该字符串仅用于来自代理的身份验证陷阱,对于访问入站代理以获取其他管理数据来说是无用的。

A further liability of authentication traps can be seen when they are being generated in the face of a Denial Of Service (DOS) attack, in the form of a flood of PDUs with invalid community strings, on the agent system. If it is bad enough that the system is having to respond to and recover from the invalid agent data accesses, but the problem will be compounded if a separate Authentication notification PDU is sent to each recipient on the management network.

当身份验证陷阱在代理系统上面临拒绝服务(DOS)攻击时(以PDU洪流的形式,带有无效社区字符串)产生时,可以看到身份验证陷阱的进一步责任。如果系统必须对无效的代理数据访问做出响应并从中恢复,这已经够糟糕的了,但是如果向管理网络上的每个收件人发送单独的身份验证通知PDU,问题将变得更加复杂。

6.4. Sensitive Information Handling
6.4. 敏感信息处理

Some MIB modules contain objects that may contain data for keys, passwords and other such sensitive information and hence must be protected from unauthorized access. MIB documents that are created in the IETF must have a 'Security Considerations' section, which details how sensitive information should be protected. Similarly, MIB module designers who create MIB documents for private MIB objects should include similar information so that users of the products containing these objects can take appropriate precautions.

某些MIB模块包含的对象可能包含密钥、密码和其他此类敏感信息的数据,因此必须防止未经授权的访问。在IETF中创建的MIB文档必须有一个“安全注意事项”部分,详细说明应如何保护敏感信息。类似地,为私有MIB对象创建MIB文档的MIB模块设计人员应该包含类似的信息,以便包含这些对象的产品的用户可以采取适当的预防措施。

Even if a device does support DES, it should be noted that configuration of keys for other protocols via SNMP Sets protected by DES should not be allowed if the other keys are longer than the 56 bit DES keys protecting the SNMP transmission.

即使设备支持DES,也应注意,如果其他密钥长于保护SNMP传输的56位DES密钥,则不允许通过受DES保护的SNMP集配置其他协议的密钥。

The DESCRIPTION clause for these object types and their Security Considerations sections in the documents which define them should make it clear how and why these specific objects are sensitive and that a user should only make them accessible for encrypted SNMP access. Vendors should also document sensitive objects in a similar fashion.

在定义这些对象类型的文档中,这些对象类型的描述条款及其安全注意事项部分应明确说明这些特定对象是如何敏感的以及为什么敏感的,并且用户应仅允许对这些对象进行加密的SNMP访问。供应商还应以类似的方式记录敏感对象。

Confidentiality is not a mandatory portion of the SNMPv3 management framework [6].

保密性不是SNMPv3管理框架的强制性部分[6]。

Prior to SNMPv3, providing customized views of MIB module data was difficult. This led to objects being defined such as the following from [41].

在SNMPv3之前,很难提供MIB模块数据的定制视图。这导致定义了如下[41]中的对象。

   docsDevNmAccessEntry OBJECT-TYPE
       SYNTAX      DocsDevNmAccessEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "An entry describing access to SNMP objects by a
            particular network management station.  An entry in
            this table is not readable unless the management station
            has read-write permission (either implicit if the table
            is empty, or explicit through an entry in this table.
            Entries are ordered by docsDevNmAccessIndex.  The first
            matching entry (e.g., matching IP address and community
            string) is used to derive access."
       INDEX { docsDevNmAccessIndex  }
       ::= {  docsDevNmAccessTable 1 }
        
   docsDevNmAccessEntry OBJECT-TYPE
       SYNTAX      DocsDevNmAccessEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "An entry describing access to SNMP objects by a
            particular network management station.  An entry in
            this table is not readable unless the management station
            has read-write permission (either implicit if the table
            is empty, or explicit through an entry in this table.
            Entries are ordered by docsDevNmAccessIndex.  The first
            matching entry (e.g., matching IP address and community
            string) is used to derive access."
       INDEX { docsDevNmAccessIndex  }
       ::= {  docsDevNmAccessTable 1 }
        

New MIB modules should capitalize on existing security capabilities of SNMPv3 Framework. One way they can do this is by indicating the level of security appropriate to different object types. For example, objects that change the configuration of the system might be protected by using the authentication mechanisms in SNMPv3. Specifically, it is useful to design MIB module object grouping with considerations for VACM views definition, such that users can define and properly scope what tables are visible to a given user and view.

新的MIB模块应该利用SNMPv3框架的现有安全功能。他们可以这样做的一种方法是指出适合不同对象类型的安全级别。例如,可以使用SNMPv3中的身份验证机制来保护更改系统配置的对象。具体来说,在设计MIB模块对象分组时考虑VACM视图定义非常有用,这样用户就可以定义并正确确定给定用户和视图可见的表的范围。

7. Policy-based Management
7. 基于策略的管理

In some designs and implementations, a common practice used to move large amounts of data involves using SNMP as a control channel in combination with other protocols defined for transporting bulk data. This approach is sub-optimal since it raises a number of security and other concerns. Transferring large amounts of configuration data via SNMP can be efficiently performed with several of the techniques described earlier in this document. This policy section shows how even greater efficiency can be achieved using a set of relatively new design mechanisms. This section gives background and defines terms that are relevant to this field and describes some deployment approaches.

在一些设计和实现中,用于移动大量数据的常见做法包括将SNMP与为传输批量数据而定义的其他协议结合使用作为控制通道。这种方法是次优的,因为它会引起许多安全和其他问题。使用本文档前面介绍的几种技术,可以有效地通过SNMP传输大量配置数据。本政策部分展示了如何使用一组相对较新的设计机制来实现更高的效率。本节介绍了背景知识,定义了与此领域相关的术语,并描述了一些部署方法。

7.1. What Is the Meaning of 'Policy-based'?
7.1. “基于政策”的含义是什么?

In the past few years of output from standards organizations and networking vendor marketing departments, the term 'policy' has been heavily used, touted, and contorted in meaning. The result is that the true meaning of 'policy' is unclear without greater qualification where it is used.

在过去几年标准组织和网络供应商营销部门的成果中,“政策”一词被大量使用、吹捧和扭曲。结果是,“政策”的真正含义不清楚,在使用时没有更大的限定。

[42] gives the term 'policy' two explicit definitions:

[42] 给出了术语“策略”的两个明确定义:

- A definite goal, course or method of action to guide and determine present and future decisions. "Policies" are implemented or executed within a particular context (such as policies defined within a business unit).

- 指导和决定当前和未来决策的明确目标、过程或行动方法。“策略”在特定上下文中实现或执行(例如在业务单元中定义的策略)。

- Policies as a set of rules to administer, manage, and control access to network resources.

- 策略作为一组规则,用于管理和控制对网络资源的访问。

Note that these two views are not contradictory since individual rules may be defined in support of business goals.

请注意,这两个视图并不矛盾,因为可以定义单个规则来支持业务目标。

As it pertains to our discussion of the term 'policy-based configuration', the meaning is significantly more specific. In this context, we refer to a way of integrating data and the management actions which use it in such a way that:

由于它与我们对术语“基于策略的配置”的讨论有关,因此其含义更为具体。在本文中,我们指的是一种整合数据和管理行动的方法,其使用方式如下:

- there is the ability to specify "default" configuration data for a number of instances of managed elements, where those instances can be correlated in some data driven or algorithmic way. The engine to do this correlation and activate instances from defaults may reside in the agent or externally. Where the representation of these defaults are in the MIB design itself, the object types supporting this notion are referred to as "template objects".

- 可以为托管元素的多个实例指定“默认”配置数据,这些实例可以通过某种数据驱动或算法的方式进行关联。执行此关联并从默认值激活实例的引擎可能位于代理中或外部。如果这些默认值的表示在MIB设计本身中,则支持此概念的对象类型称为“模板对象”。

- the activation of instance data derived from template object types results from minimal activation directives from the management application, once the instances of the template object types have been established.

- 一旦建立了模板对象类型的实例,从模板对象类型派生的实例数据的激活来自管理应用程序的最小激活指令。

- somewhat independently, the architecture of the overall management agent may accommodate the definition and evaluation of management and configuration policies. The side-effects of the evaluation of these policies typically include the activation of certain configuration directives. Where management data design exposes template object types, the policy-driven activation can (and ideally, should) include the application of template object instances to the analogous managed element instance-level values.

- 总体管理代理的体系结构可以在某种程度上独立地适应管理和配置策略的定义和评估。评估这些策略的副作用通常包括激活某些配置指令。当管理数据设计公开模板对象类型时,策略驱动的激活可以(理想情况下应该)包括将模板对象实例应用到类似的托管元素实例级别值。

As it pertains to template object data, the underlying notions implied here have been prevalent for some time in non-SNMP management regimes. A common feature of many command line interfaces for configuring routers is the specification of one or more access control lists. These typically provide a set of IP prefixes, BGP autonomous system numbers, or other such identifying constructs (see, for example, [42]). Once these access control lists are assembled, their application to various interfaces, routing processes, and the like are specified typically in the configuration of what the access control list is applied to. Consistent with the prior properties to

由于它与模板对象数据有关,因此此处隐含的基本概念在非SNMP管理制度中流行了一段时间。许多用于配置路由器的命令行界面的一个共同特征是指定一个或多个访问控制列表。它们通常提供一组IP前缀、BGP自治系统编号或其他此类标识结构(例如,参见[42])。一旦组装了这些访问控制列表,它们对各种接口、路由过程等的应用通常在访问控制列表所应用的配置中指定。与之前的属性一致

define our use of policy-based configuration, a) the access list is defined independent from its point of application, and b) its application is independent of the access list definition. For example, changing the application of an access list from one interface to the other does not require a change in the access list itself. The first point just mentioned suggests what is necessary for template-based data organization. The second suggests its application in a policy-based manner.

定义我们对基于策略的配置的使用,a)访问列表的定义独立于其应用程序点,b)其应用程序独立于访问列表定义。例如,将访问列表的应用程序从一个接口更改为另一个接口并不需要更改访问列表本身。刚才提到的第一点说明了基于模板的数据组织的必要性。第二个建议是以基于政策的方式应用它。

Let us now examine the motivation for such a system or subsystem (perhaps bounded at the level of a 'template-enabled' MIB module, given the above definition). Let us explore the importance of policy-based techniques to configuration specifically.

现在让我们检查一下这样一个系统或子系统的动机(根据上面的定义,可能限制在“支持模板”的MIB模块级别)。让我们具体探讨基于策略的技术对配置的重要性。

7.2. Organization of Data in an SNMP-Based Policy System
7.2. 基于SNMP的策略系统中的数据组织

The number of configurable parameters and 'instances' such as interfaces has increased as equipment has become larger and more complex.

随着设备变得更大、更复杂,可配置参数和接口等“实例”的数量有所增加。

At the same time, there is a need to configure many of these systems to operate in a coordinated fashion. This enables the delivery of new specialized services that require this coordinated configuration. Examples include delivery of virtual private networks and connections that guarantee specific service levels.

同时,需要对这些系统中的许多系统进行配置,以便以协调的方式运行。这使得能够提供需要这种协调配置的新的专门服务。示例包括提供保证特定服务级别的虚拟专用网络和连接。

The growth in size and complexity of configuration information has significant implications for its organization as well as its efficient transfer to the management agent. As an example, an agent that implements the Bridge MIB [24] could be used to represent a large VLAN with some 65,000 port entries. Configuring such a VLAN would require the establishment of dot1dStpPortTable and dot1DStaticTable entries for each such virtual port. Each table entry would contain several parameters. A more efficient approach is to provide default values for the creation of new entries that are appropriate to the VLAN environment in our example. The local management infrastructure should then iterate across the system setting the default values to the selected ports as groups.

配置信息的大小和复杂性的增长对其组织以及向管理代理的有效传输具有重大影响。例如,实现网桥MIB[24]的代理可用于表示具有约65000个端口条目的大型VLAN。配置这样的VLAN需要为每个这样的虚拟端口建立dot1dstportable和dot1DStaticTable条目。每个表条目将包含几个参数。在我们的示例中,一种更有效的方法是为创建适合VLAN环境的新条目提供默认值。然后,本地管理基础结构应在整个系统中迭代,将所选端口的默认值设置为组。

To date, this kind of large-scale configuration has been accomplished with file transfer, by setting individual MIB objects, or with many CLI commands. In each of these approaches the details for each instance are contained in the file, CLI commands or MIB objects. That is, they contain not only the value, and type of object, but also the exact instance of the object to which to apply the value. It is this property that tends to make configuration operations explode as the number of instances (such as interfaces) grows. This per-instance approach can work for a few machines configured by

到目前为止,这种大规模配置是通过文件传输、设置单个MIB对象或使用许多CLI命令来完成的。在这些方法中,每个实例的详细信息都包含在文件、CLI命令或MIB对象中。也就是说,它们不仅包含对象的值和类型,还包含要应用值的对象的确切实例。正是这个属性使得配置操作随着实例(如接口)数量的增加而爆炸。这种基于实例的方法适用于由配置的少数机器

experts, but there is a need for a more scalable solution. Template-based data organization and policy-based management abstracts the details above the instance level, which means that fewer SET requests are sent to a managed device.

专家,但需要一个更具可扩展性的解决方案。基于模板的数据组织和基于策略的管理抽象了实例级别以上的详细信息,这意味着向受管设备发送的SET请求更少。

Realization of such a policy-driven system requires agents that can take defaults and apply them to instances based on a rule that defines under what conditions the defaults (policy) are to be applied. A policy-driven configuration system which is to be scalable needs to expose a means of layering its application of defaults at discrete ranges of granularity. The spectrum of that granularity might have a starting hierarchy point to apply defaults at the breadth of a network service.

实现这样一个策略驱动的系统需要代理,代理可以接受默认值,并根据一个规则将它们应用到实例,该规则定义了在什么条件下应用默认值(策略)。策略驱动的配置系统要具有可扩展性,需要公开一种方法,以离散的粒度范围将其默认应用分层。这种粒度的范围可能有一个起始层次结构点,可以在网络服务的范围内应用默认值。

Ultimately, such a layering ends up with features to support instance-level object instance data within the running agent.

最终,这样的分层最终得到了在运行的代理中支持实例级对象实例数据的特性。

An example of this kind of layering is implicit in the principle of operations of a SNMPCONF Policy-Based Management MIB [36] (PM-MIB) implementation. However, other entity management systems have been employing these kinds of techniques end-to-end for some time, in some cases using SNMP, in some cases using other encodings and transfer technologies. What the PM-MIB seeks to establish, in an environment ideal for its deployment, is an adaptation between MIB module data which was not designed using template object types, and the ability to allow the PM-MIB agent engine to apply instances of that data as though it were template-based.

这种分层的示例隐含在基于SNMPCONF策略的管理MIB[36](PM-MIB)实现的操作原理中。然而,其他实体管理系统端到端地使用这些技术已有一段时间了,在某些情况下使用SNMP,在某些情况下使用其他编码和传输技术。PM-MIB试图在适合其部署的环境中建立MIB模块数据(未使用模板对象类型设计)与允许PM-MIB代理引擎应用该数据实例的能力之间的自适应,就像它基于模板一样。

7.3. Information Related to Policy-based Configuration
7.3. 与基于策略的配置相关的信息

In order for effective policy management to take place, a range of information about the network elements is needed to avoid making poor policy decisions. Even in those cases where policy-based configuration is not in use, much of the information described in this section can be useful input to the decision-making process about what type of configuration operations to do.

为了进行有效的政策管理,需要一系列关于网络元素的信息,以避免做出糟糕的政策决策。即使在不使用基于策略的配置的情况下,本节中描述的许多信息也可以作为决策过程的有用输入,用于确定要执行哪种类型的配置操作。

For this discussion it is important to make distinctions between distribution of policy to a system, activation of a policy in a system, and changes/failures that take place during the time the policy is expected to be active. For example, if an interface is down that is included in a policy that is distributed, there may not be an error since the policy may not be scheduled for activation until a later time.

在本次讨论中,重要的是区分将策略分发给系统、在系统中激活策略以及在策略预期处于活动状态期间发生的更改/故障。例如,如果已分发的策略中包含的接口已关闭,则可能不会出现错误,因为该策略可能在以后才会计划激活。

On the other hand, if a policy is distributed and applied to an interface that should be operational and it is not, clearly this is a problem, although it is not an error in the configuration policy

另一方面,如果一个策略被分发并应用到一个应该是可操作的接口,而它不是,那么这显然是一个问题,尽管它不是配置策略中的错误

itself. With this as background, here are some areas to consider that are important to making good policy configuration decisions and establishing when a policy has 'failed'.

它本身以此为背景,这里有一些值得考虑的领域,它们对于制定良好的策略配置决策和建立策略“失败”是很重要的。

o The operational state of network elements that are to be configured.

o 要配置的网络元素的操作状态。

Care should be taken to determine if the sub-components to be configured are available for use. In some cases the elements may not be available. The policy configuration software should determine if this is a prerequisite to policy installation or if the condition is even acceptable. This decision is separate from the one to be made about policy activation. Installation is when the policy is sent from the policy manager to the managed device and activation is turning on the policy. In those cases where policy is distributed when the sub-component such as an interface or disk is not available, the managed system should send a notification to the designated management station when the policy is to become active or if the resource is still not available.

应注意确定要配置的子组件是否可供使用。在某些情况下,这些元素可能不可用。策略配置软件应确定这是否是策略安装的先决条件,或者该条件是否可以接受。此决定与关于策略激活的决定是分开的。安装是指将策略从策略管理器发送到受管设备,并且激活正在打开策略。在子组件(如接口或磁盘)不可用时分发策略的情况下,当策略变为活动状态或资源仍然不可用时,受管系统应向指定的管理站发送通知。

o The capabilities of the devices in the network.

o 网络中设备的功能。

A capability can be almost any unit of work a network element can perform. These include routing protocols supported, Web server and OS versions, queuing mechanisms supported on each interface that can be used to support different qualities of service, and many others. This information can be obtained from the capabilities table of the Policy MIB module [36].

能力几乎可以是网元可以执行的任何工作单元。这些包括支持的路由协议、Web服务器和操作系统版本、每个接口上支持的队列机制(可用于支持不同的服务质量)以及许多其他。该信息可从策略MIB模块的能力表中获得[36]。

Historically, management applications have had to obtain this type of information by issuing get requests for objects they might want to use. This approach is far less efficient since it requires many get requests and is more error prone since some instances will not exist until configured. The new capabilities table is an improvement on the current technique.

从历史上看,管理应用程序必须通过对可能要使用的对象发出get请求来获取此类信息。这种方法的效率要低得多,因为它需要许多get请求,并且更容易出错,因为某些实例在配置之前是不存在的。新的能力表是对当前技术的改进。

o The capacity of the devices to perform the desired work.

o 设备执行所需工作的能力。

Capability is an ability to perform the desired work while a capacity is a measure of how much of that capability the system has. The policy configuration application should, wherever possible, evaluate the capacity of the network element to perform the work identified by the policy. In some systems it will not be possible to obtain the capacity of the managed elements to perform the desired work directly, even though it may be possible to monitor the amount of work the element performs. In these cases, the management application may benefit from pre-configured

能力是指执行所需工作的能力,而能力是衡量系统具有多少能力的指标。策略配置应用程序应尽可能评估网元执行策略标识的工作的能力。在某些系统中,不可能获得受管元件直接执行所需工作的能力,即使可以监控元件执行的工作量。在这些情况下,管理应用程序可能受益于预配置

information about the capacity of different network elements so that evaluations of the resources available can be done before distributing new policies.

有关不同网络元素的容量的信息,以便在分发新策略之前对可用资源进行评估。

Utilization refers to how much capacity for a particular capability has been consumed. For devices that have been under policy configuration control for any period of time, a certain percentage of the available capacity of the managed elements will be used. Policies should not be distributed to systems that do not have the resources to carry out the policy in a reasonable period of time.

利用率是指特定功能的容量消耗量。对于任何时间段内处于策略配置控制下的设备,将使用托管元素可用容量的一定百分比。不应将策略分发给没有资源在合理时间内执行策略的系统。

7.4. Schedule and Time Issues
7.4. 时间表和时间问题

This section applies equally to systems that are not policy-based as well as policy-based systems, since configuration operations often need to be synchronized across time zones. Wherever possible, the network elements should support time information using the standard DateAndTime TC that includes local time zone information. Policy-based management often requires more complex time expressions than can be conveyed with the DateAndTime TC. See the Policy-Based Management MIB document [36] for more information. Some deployed systems do not store complex notions of local time and thus may not be able to process policy directives properly that contain time zone relevant data. For this reason, policy management applications should have the ability to ascertain the time keeping abilities of the managed system and make adjustments to the policy for those systems that are time-zone challenged.

本节同样适用于非基于策略的系统以及基于策略的系统,因为配置操作通常需要跨时区同步。在可能的情况下,网元应支持使用包括本地时区信息的标准DateAndTime TC的时间信息。基于策略的管理通常需要比DateAndTime TC更复杂的时间表达式。有关更多信息,请参阅基于策略的管理MIB文档[36]。一些已部署的系统不存储本地时间的复杂概念,因此可能无法正确处理包含时区相关数据的策略指令。因此,策略管理应用程序应该能够确定受管系统的计时能力,并为那些时区受到挑战的系统调整策略。

7.5. Conflict Detection, Resolution and Error Reporting
7.5. 冲突检测、解决和错误报告

Policies sent to a device may contain conflicting instructions. Detection of such commands can occur at the device or management level and may be resolved using any number of mechanisms (examples are, last configuration set wins, or abort change). These unintended conflicts should be reported. Conflicts can occur at different levels in a chain of commands. Each 'layer' in policy management system should be able to check for some errors and report them. This is conceptually identical to programs raising an exception and passing that information on to software that can do something meaningful with it.

发送到设备的策略可能包含冲突的指令。此类命令的检测可在设备或管理级别进行,并可使用任意数量的机制(例如,上次配置集wins或中止更改)进行解决。应报告这些意外冲突。冲突可能发生在命令链的不同级别。策略管理系统中的每个“层”都应该能够检查并报告一些错误。这在概念上与引发异常的程序相同,并将该信息传递给可以对其执行有意义的操作的软件。

At the instance level, conflict detection has been performed in a limited way for some time in software that realizes MIB objects at this level of resolution. This detection is independent of policy. The types of 'conflicts' usually checked for are resource availability and validity of the set operations. In a policy enabled

在实例级别,冲突检测在以这种分辨率实现MIB对象的软件中以有限的方式执行了一段时间。此检测独立于策略。通常检查的“冲突”类型是资源可用性和集合操作的有效性。在启用策略的情况下

system, there are no additional requirements for this software assuming that good error detection and reporting appropriate to this level have already been implemented.

在系统中,假设已经实现了适用于此级别的良好错误检测和报告,则此软件没有其他要求。

7.5.1. Changes to Configuration Outside of the Policy System
7.5.1. 对策略系统之外的配置的更改

It is essential to consider changes to configuration that are initiated outside of the policy system. A goal of SNMP-based policy management is to coexist with other kinds of management software that have historically been instance based management. The best example is the command line interface.

必须考虑在策略系统之外发起的配置更改。基于SNMP的策略管理的目标是与历史上一直基于实例的管理的其他类型的管理软件共存。最好的例子是命令行界面。

A notification should be sent whenever an out-of-policy control change is made to an element that is under the control of policy. This notification should include the policy that was affected, the instance of the element that was changed and the object and value that it was changed to.

每当对受策略控制的元素进行超出策略控制的更改时,应发送通知。此通知应包括受影响的策略、已更改元素的实例以及更改为的对象和值。

Even for those systems that have no concept of policy control, the ideas presented above make sense. That is, if SNMP co-exists with other access methods such as a CLI, it is essential that the management station remain synchronized with changes that might have been made to the managed device using other methods. As a result, the approach of sending a notification when another access method makes a change is a good one. Of course this should be configurable by the user.

即使对于那些没有政策控制概念的系统,上面提出的想法也是有意义的。也就是说,如果SNMP与其他访问方法(如CLI)共存,则管理站必须与可能已使用其他方法对受管设备进行的更改保持同步。因此,当另一个访问方法进行更改时发送通知的方法是一种很好的方法。当然,这应该由用户配置。

7.6. More about Notifications in a Policy System
7.6. 有关策略系统中通知的详细信息

Notifications can be useful in determining a failure of a policy as a result of an error in the policy or element(s) under policy control. As with all notifications, they should be defined and controlled in such a way that they do not create a problem by sending more than are helpful over a specific period of time. For example, if a policy is controlling 1,000 interfaces and fails, one notification rather than 1,000 may be the better approach. In addition, such notifications should be defined to include as much information as possible to aid in problem resolution.

通知可用于确定由于策略或策略控制下的元素中的错误而导致的策略失败。与所有通知一样,它们的定义和控制方式应确保在特定时间段内发送的通知不会造成问题,因为发送的通知超出了有用的范围。例如,如果一个策略控制1000个接口但失败,则一个通知而不是1000个通知可能是更好的方法。此外,此类通知应定义为包含尽可能多的信息,以帮助解决问题。

7.7. Using Policy to Move Less Configuration Data
7.7. 使用策略移动更少的配置数据

One of the advantages of policy-based configuration with SNMP is that many configuration operations can be conveyed with a small amount of data. Changing a single configuration parameter for each of 100 interfaces on a system might require 100 CLI commands or 100 SNMP variable bindings using conventional techniques.

使用SNMP进行基于策略的配置的优点之一是,许多配置操作可以用少量数据进行传输。为系统上100个接口中的每个接口更改单个配置参数可能需要使用传统技术执行100个CLI命令或100个SNMP变量绑定。

Using policy-based configuration with SNMP, a single SET PDU can be sent with the policy information necessary to apply a configuration change to 100 similar interfaces. This efficiency gain is the result of eliminating the need to send the value for each instance to be configured. The 'default' for each of the instances included in the policy is sent, and the rule for selection of the instances that the default is to be applied to can also be carried (see the Policy MIB module [36]).

通过SNMP使用基于策略的配置,可以发送一组PDU,其中包含将配置更改应用于100个类似接口所需的策略信息。这种效率提高是由于不需要为要配置的每个实例发送值。发送策略中包含的每个实例的“默认值”,也可以携带选择默认值要应用到的实例的规则(请参阅策略MIB模块[36])。

To extend the example above, assume that there are 10 parameters that need to change. Using conventional techniques, there would now be 1,000 variable bindings, one for each instance of each new value for each interface. Using policy-based configuration with SNMP, it is still likely that all the information can be conveyed in one SET PDU. The only difference in this case is that there are ten parameters sent that will be the 'template' used to create instances on the managed interfaces.

为了扩展上面的示例,假设有10个参数需要更改。使用传统技术,现在将有1000个变量绑定,每个接口的每个新值的每个实例一个。在SNMP中使用基于策略的配置,很可能所有信息都可以在一组PDU中传输。这种情况下唯一的区别是,发送了十个参数,它们将成为用于在托管接口上创建实例的“模板”。

This efficiency gain not only applies to SET operations, but also to those management operations that require configuration information. Since the policy is also held in the storage for cross-instance defaults (for example, the pmPolicyTable in [36]), an entire data set that potentially controls hundreds of rows of information can be retrieved in a single GET request.

这种效率提高不仅适用于SET操作,也适用于那些需要配置信息的管理操作。由于策略也保存在跨实例默认值的存储中(例如,[36]中的pmPolicyTable),因此可以在单个GET请求中检索可能控制数百行信息的整个数据集。

A policy-friendly data organization such as this is consistent and integrates well with MIB module objects which support "summary" activation and activation reporting, of the kind discussed in Section 3.3.5.

像这样的策略友好型数据组织是一致的,并且与支持第3.3.5节中讨论的“摘要”激活和激活报告的MIB模块对象集成良好。

8. Example MIB Module With Template-based Data
8. 具有基于模板的数据的示例MIB模块

This section defines a MIB module that controls the heating and air conditioning system for a large building. It contains both configuration and counter objects that allow operators to see how much cooling or heating a particular configuration has consumed. Objects that represent the configuration information at a "default" level (as referenced above) are also included.

本节定义了一个MIB模块,用于控制大型建筑的供暖和空调系统。它包含配置和计数器对象,允许操作员查看特定配置消耗了多少冷却或加热。还包括在“默认”级别(如上所述)表示配置信息的对象。

These tables, in combination with the application of the tables' row instance data as templated 'defaults', will allow operators to configure and monitor many rooms at once, change the configuration parameters based on time of day, and make a number of other sophisticated decisions based on the 'policy' implied by these defaults and their application. For this reason, these configuration controls have their instances specified from template object types.

这些表格与表格“行实例数据”作为模板“默认值”的应用相结合,将允许操作员一次配置和监控多个房间,根据一天中的时间更改配置参数,并根据这些默认值及其应用所隐含的“策略”做出许多其他复杂的决策。因此,这些配置控件的实例是从模板对象类型指定的。

In our simplified Heating Ventilation and Air Conditioning (HVAC) model we will create three tables based on a simple analysis. More complicated systems will need more tables, but the principles will be the same.

在简化的暖通空调(HVAC)模型中,我们将根据简单的分析创建三个表。更复杂的系统需要更多的表格,但原理是一样的。

Step 1: As with any other MIB module design, the first step is to determine what objects are necessary for configuration and control operations. The first table to be created is a fairly traditional monitoring table. It includes indices so that we will know what rooms the counters and status objects are for. It includes an object that is a RowPointer to a table that contains configuration information. The objects for the bldgHVACTable, our first table in the HVAC MIB module are:

步骤1:与任何其他MIB模块设计一样,第一步是确定配置和控制操作所需的对象。要创建的第一个表是一个相当传统的监视表。它包括索引,以便我们知道计数器和状态对象用于哪些房间。它包括一个对象,该对象是指向包含配置信息的表的行指针。bldgHVACTable的对象是HVAC MIB模块中的第一个表:

Index objects that identify what floor and office we are managing:

标识我们管理的楼层和办公室的索引对象:

bldgHVACFloor bldgHVACOffice

bldgHVACFloor bldgHVACOffice

A single index reference to a table that 'glues' configuration information defaults with descriptive information:

表的单个索引引用将配置信息默认值与描述性信息“粘合”在一起:

bldgHVACCfgTemplate

BLDGHVACCFG模板

A set of objects that show status and units of work (bldgHVACCoolOrHeatMins) and standard per-row SnmpAdminString, StorageType, and RowStatus columnar objects:

一组对象,显示状态和工作单元(BLDGHVAccolorHeatmins)以及标准的每行SNMPAdminInstalling、StorageType和RowStatus列对象:

bldgHVACFanSpeed bldgHVACCurrentTemp bldgHVACCoolOrHeatMins bldgHVACDiscontinuityTime bldgHVACOwner bldgHVACStatus

BLDGHVACFANSSPEED BLDGHVACCURENTTEMP bldgHVACCoolOrHeatMins BLDGHVACINTERFANCITYTIME bldgHVACOwner bldgHVACStatus

Step 2: A configuration description table. The purpose of this table is to provide a unique string identifier for templates. These may be driven by policies in a network. If it were necessary to configure devices to deliver a particular quality of service, the index string of this table could be the name and the description part, it could be a brief description of the underlying motivation such as: "provides extra heat to corner offices to counteract excessive exterior wind

步骤2:配置描述表。此表的目的是为模板提供唯一的字符串标识符。这些可能由网络中的策略驱动。如果有必要配置设备以提供特定的服务质量,此表的索引字符串可以是名称和描述部分,也可以是对潜在动机的简要描述,例如:“为角落办公室提供额外热量,以抵消过多的外部风。”

chill". Standard owner and status objects may also be helpful and are included here. The row columnar objects are:

标准所有者和状态对象也可能很有用,包括在此处。行-列对象包括:

bldgHVACCfgTemplateInfoIndex bldgHVACCfgTemplateInfoID bldgHVACCfgTemplateInfoDescr bldgHVACCfgTemplateInfoOwner bldgHVACCfgTemplateInfoStatus

bldgHVACCfgTemplateInfoIndex bldgHVACCfgTemplateInfoID bldgHVACCfgTemplateInfoDescr bldgHVACCfgTemplateInfoOwner bldgHVACCfgTemplateInfoStatus

Notice that to this point we have provided no configuration information. That will be in the next table. Some readers may wonder why this table is not combined with the configuration template table described in the next step. In fact, they can be. The reason for having a separate table is that as systems become more complex, there may be more than one configuration table that points to these descriptions. Another reason for two tables is that this in not reproduced for every template and instance, which can save some additional data movement. Every designer will have to evaluate the tradeoffs between number of objects and data movement efficiency just as with other MIB modules.

请注意,到目前为止,我们还没有提供任何配置信息。那将在下一张桌子上。一些读者可能想知道为什么这个表没有与下一步中描述的配置模板表结合使用。事实上,他们可以。使用单独表的原因是,随着系统变得更加复杂,可能会有多个配置表指向这些描述。创建两个表的另一个原因是,这不会针对每个模板和实例进行复制,这可以节省一些额外的数据移动。与其他MIB模块一样,每个设计人员都必须评估对象数量和数据移动效率之间的权衡。

Step 3: The bldgHVACCfgTemplateTable contains the specific configuration parameters that are pointed to by the bldgHVACConfigPtr object. Note that many rows in the bldgHVACTable can point to an entry in this table. It is also possible for entries to be used by 1 or 0 rows of the bldgHVACTable. It is the property of allowing multiple rows (instances) in the bldgHVACTable to point to a row in this table that can produce such efficiency gains from policy-based management with SNMP. Also notice that the configuration data is tied directly to the counter data so that people can see how configurations impact behavior.

步骤3:bldgHVACCfgTemplateTable包含bldgHVACConfigPtr对象指向的特定配置参数。请注意,bldgHVACTable中的许多行都可以指向此表中的一个条目。bldgHVACTable的1行或0行也可以使用条目。这是允许bldgHVACTable中的多行(实例)指向此表中的一行的属性,该行可以通过使用SNMP进行基于策略的管理来提高效率。还要注意,配置数据直接绑定到计数器数据,以便人们可以看到配置如何影响行为。

The objects in this table are all that are necessary for configuration and connection to the other tables as well as the usual SnmpAdminString, StorageType, and RowStatus objects:

此表中的对象是配置和连接到其他表所需的所有对象,以及常见的SNMPAdministring、StorageType和RowStatus对象:

A simple index to the table:

表的简单索引:

bldgHVACCfgTemplateIndex

bldgHVACCfgTemplateIndex

The configuration objects:

配置对象包括:

bldgHVACCfgTemplateDesiredTemp bldgHVACCfgTemplateCoolOrHeat

BLDGHVACCFGTemplatedDesiredTemp BLDGHVACCFGTemplate冷却或加热

Administrative objects for SnmpAdminString and RowStatus:

SNMPAdministring和RowStatus的管理对象:

bldgHVACCfgTemplateInfo bldgHVACCfgTemplateOwner bldgHVACCfgTemplateStorage bldgHVACCfgTemplateStatus

bldgHVACCfgTemplateInfo bldgHVACCfgTemplateOwner bldgHVACCfgTemplateStorage bldgHVACCfgTemplateStatus

8.1. MIB Module Definition
8.1. MIB模块定义
BLDG-HVAC-MIB DEFINITIONS ::= BEGIN
IMPORTS
    MODULE-IDENTITY, Counter32,
    Gauge32, OBJECT-TYPE, Unsigned32, experimental
        FROM SNMPv2-SMI
    MODULE-COMPLIANCE, OBJECT-GROUP
       FROM SNMPv2-CONF
    TEXTUAL-CONVENTION,
    TimeStamp, RowStatus, StorageType
        FROM SNMPv2-TC
    SnmpAdminString
        FROM SNMP-FRAMEWORK-MIB;
        
BLDG-HVAC-MIB DEFINITIONS ::= BEGIN
IMPORTS
    MODULE-IDENTITY, Counter32,
    Gauge32, OBJECT-TYPE, Unsigned32, experimental
        FROM SNMPv2-SMI
    MODULE-COMPLIANCE, OBJECT-GROUP
       FROM SNMPv2-CONF
    TEXTUAL-CONVENTION,
    TimeStamp, RowStatus, StorageType
        FROM SNMPv2-TC
    SnmpAdminString
        FROM SNMP-FRAMEWORK-MIB;
        

bldgHVACMIB MODULE-IDENTITY LAST-UPDATED "200303270000Z" ORGANIZATION "SNMPCONF working group E-mail: snmpconf@snmp.com" CONTACT-INFO "Jon Saperia Postal: JDS Consulting 174 Chapman Street Watertown, MA 02472 U.S.A. Phone: +1 617 744 1079 E-mail: saperia@jdscons.com

bldgHVACMIB模块-IDENTITY上次更新的“200303270000Z”组织“SNMPCONF工作组电子邮件:snmpconf@snmp.com“联系方式”Jon Saperia邮政:JDS Consulting 174 Chapman Street Watertown,MA 02472美国电话:+1 617 744 1079电子邮件:saperia@jdscons.com

Wayne Tackabury Postal: Gold Wire Technology 411 Waverley Oaks Rd. Waltham, MA 02452 U.S.A. Phone: +1 781 398 8800 E-mail: wayne@goldwiretech.com

Wayne Tackabury Postal:Gold Wire Technology 411 Waverley Oaks Rod.Waltham,MA 02452美国电话:+1 781 398 8800电子邮件:wayne@goldwiretech.com

Michael MacFaden Postal: Riverstone Networks 5200 Great America Pkwy. Santa Clara, CA 95054 U.S.A. Phone: +1 408 878 6500 E-mail: mrm@riverstonenet.com

迈克尔·麦克法登邮政:Riverstone Networks 5200 Great America Pkwy。加利福尼亚州圣克拉拉市95054美国电话:+1408 878 6500电子邮件:mrm@riverstonenet.com

David Partain Postal: Ericsson AB P.O. Box 1248 SE-581 12 Linkoping Sweden E-mail: David.Partain@ericsson.com" DESCRIPTION "This example MIB module defines a set of management objects for heating ventilation and air conditioning systems. It also includes objects that can be used to create policies that are applied to rooms. This eliminates the need to send per-instance configuration commands to the system.

David Partain邮政:爱立信股份有限公司邮箱1248 SE-581 12 Linkoping Sweden电子邮件:David。Partain@ericsson.com“说明”此示例MIB模块为暖通空调系统定义了一组管理对象。它还包括可用于创建应用于文件室的策略的对象。这样就无需向系统发送每个实例的配置命令。

Copyright (C) The Internet Society (2003). This version of this MIB module is part of RFC 3512; see the RFC itself for full legal notices."

版权所有(C)互联网协会(2003年)。此MIB模块的此版本是RFC 3512的一部分;有关完整的法律通知,请参见RFC本身。”

    REVISION "200303270000Z"
    DESCRIPTION
        "Initial version of BLDG-HVAC-MIB as published in RFC 3512."
    ::= { experimental 122 }
        
    REVISION "200303270000Z"
    DESCRIPTION
        "Initial version of BLDG-HVAC-MIB as published in RFC 3512."
    ::= { experimental 122 }
        
bldgHVACObjects         OBJECT IDENTIFIER ::= { bldgHVACMIB 1 }
bldgConformance         OBJECT IDENTIFIER ::= { bldgHVACMIB 2 }
        
bldgHVACObjects         OBJECT IDENTIFIER ::= { bldgHVACMIB 1 }
bldgConformance         OBJECT IDENTIFIER ::= { bldgHVACMIB 2 }
        

-- -- Textual Conventions --

----文本约定--

BldgHvacOperation  ::= TEXTUAL-CONVENTION
    STATUS             current
    DESCRIPTION
        "Operations supported by a heating and cooling system.
        A reference to underlying general systems would go here."
    SYNTAX      INTEGER {
                         heat(1),
                         cool(2)
                }
--
-- HVAC Objects Group
        
BldgHvacOperation  ::= TEXTUAL-CONVENTION
    STATUS             current
    DESCRIPTION
        "Operations supported by a heating and cooling system.
        A reference to underlying general systems would go here."
    SYNTAX      INTEGER {
                         heat(1),
                         cool(2)
                }
--
-- HVAC Objects Group
        

--

--

bldgHVACTable    OBJECT-TYPE
    SYNTAX      SEQUENCE OF BldgHVACEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table is the representation and data control
        for building HVAC by each individual office.
        The table has rows for, and is indexed by a specific
        floor and office number.  Each such row includes
        HVAC statistical and current status information for
        the associated office.  The row also contains a
        bldgHVACCfgTemplate columnar object that relates the
        bldgHVACTable row to a row in the bldgHVACCfgTemplateTable.
        If this value is nonzero, then the instance in the row
        that has a value for how the HVAC has been configured
        in the associated template (bldgHVACCfgTeplateTable row).
        Hence, the bldgHVACCfgTeplateTable row contains the
        specific configuration values for the offices as described
        in this table."
    ::= { bldgHVACObjects 1 }
        
bldgHVACTable    OBJECT-TYPE
    SYNTAX      SEQUENCE OF BldgHVACEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table is the representation and data control
        for building HVAC by each individual office.
        The table has rows for, and is indexed by a specific
        floor and office number.  Each such row includes
        HVAC statistical and current status information for
        the associated office.  The row also contains a
        bldgHVACCfgTemplate columnar object that relates the
        bldgHVACTable row to a row in the bldgHVACCfgTemplateTable.
        If this value is nonzero, then the instance in the row
        that has a value for how the HVAC has been configured
        in the associated template (bldgHVACCfgTeplateTable row).
        Hence, the bldgHVACCfgTeplateTable row contains the
        specific configuration values for the offices as described
        in this table."
    ::= { bldgHVACObjects 1 }
        
bldgHVACEntry  OBJECT-TYPE
    SYNTAX       BldgHVACEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
        "A row in the bldgHVACTable.  Each row represents a particular
        office in the building, qualified by its floor and office
        number.  A given row instance can be created or deleted by
        set operations  upon its bldgHVACStatus columnar
        object instance."
    INDEX { bldgHVACFloor, bldgHVACOffice }
        ::= { bldgHVACTable 1 }
        
bldgHVACEntry  OBJECT-TYPE
    SYNTAX       BldgHVACEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
        "A row in the bldgHVACTable.  Each row represents a particular
        office in the building, qualified by its floor and office
        number.  A given row instance can be created or deleted by
        set operations  upon its bldgHVACStatus columnar
        object instance."
    INDEX { bldgHVACFloor, bldgHVACOffice }
        ::= { bldgHVACTable 1 }
        
BldgHVACEntry ::= SEQUENCE {
        bldgHVACFloor             Unsigned32,
        bldgHVACOffice            Unsigned32,
        bldgHVACCfgTemplate       Unsigned32,
        bldgHVACFanSpeed          Gauge32,
        bldgHVACCurrentTemp       Gauge32,
        bldgHVACCoolOrHeatMins    Counter32,
        bldgHVACDiscontinuityTime TimeStamp,
        bldgHVACOwner             SnmpAdminString,
        bldgHVACStorageType       StorageType,
        bldgHVACStatus            RowStatus
        }
        
BldgHVACEntry ::= SEQUENCE {
        bldgHVACFloor             Unsigned32,
        bldgHVACOffice            Unsigned32,
        bldgHVACCfgTemplate       Unsigned32,
        bldgHVACFanSpeed          Gauge32,
        bldgHVACCurrentTemp       Gauge32,
        bldgHVACCoolOrHeatMins    Counter32,
        bldgHVACDiscontinuityTime TimeStamp,
        bldgHVACOwner             SnmpAdminString,
        bldgHVACStorageType       StorageType,
        bldgHVACStatus            RowStatus
        }
        
bldgHVACFloor    OBJECT-TYPE
    SYNTAX      Unsigned32 (1..1000)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This portion of the index indicates the floor of the
         building.  The ground floor is considered the
         first floor.  For the purposes of this example,
         floors under the ground floor cannot be
         controlled using this MIB module."
    ::= { bldgHVACEntry 1 }
        
bldgHVACFloor    OBJECT-TYPE
    SYNTAX      Unsigned32 (1..1000)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This portion of the index indicates the floor of the
         building.  The ground floor is considered the
         first floor.  For the purposes of this example,
         floors under the ground floor cannot be
         controlled using this MIB module."
    ::= { bldgHVACEntry 1 }
        
bldgHVACOffice    OBJECT-TYPE
    SYNTAX      Unsigned32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This second component of the index specifies the
        office number."
    ::= { bldgHVACEntry 2 }
        
bldgHVACOffice    OBJECT-TYPE
    SYNTAX      Unsigned32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This second component of the index specifies the
        office number."
    ::= { bldgHVACEntry 2 }
        

bldgHVACCfgTemplate OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-create STATUS current DESCRIPTION "The index (bldgHVACCfgTemplateIndex instance) of an entry in the 'bldgHVACCfgTemplateTable'. The bldgHVACCfgTable row instance referenced is a pre-made configuration 'template' that represents the configuration described by the bldgHVACCfgTemplateInfoDescr object. Note that not all configurations will be under a defined template. As a result, a row in this bldgHVACTable may point to an entry in the bldgHVACCfgTemplateTable that does not in turn have a reference (bldgHVACCfgTemplateInfo) to an entry in the bldgHVACCfgTemplateInfoTable. The benefit of this approach is that all configuration information is available in one table whether all elements in the system are derived from configured templates or not.

bldgHVACCfgTemplate对象类型语法Unsigned32 MAX-ACCESS读取创建状态当前描述“索引(bldgHVACCfgTemplateIndex实例)“BldgHvacFgTemplateTable”中某个条目的。引用的BldgHvacFgTable行实例是一个预制配置“模板”,它表示BldgHvacFgTemplateInfodescr对象所描述的配置。请注意,并非所有配置都位于定义的模板下。因此,此bldgHVACTable中的行可能指向某个条目在bldgHVACCfgTemplateTable中,该表没有对bldgHVACCfgTemplateInfoTable中的条目的引用(bldgHVACCfgTemplateInfo)。此方法的好处是,无论系统中的所有元素是否源自配置的模板,所有配置信息都可以在一个表中使用。

Where the instance value for this colunmar object is zero, this row represents data for an office whose HVAC status can be monitored using the read-only columnar object instances of this row, but is not under the configuration control

如果此colunmar对象的实例值为零,则此行表示可以使用此行的只读列对象实例监视其HVAC状态但不受配置控制的办公室的数据

        of the agent."
    ::= { bldgHVACEntry 3 }
        
        of the agent."
    ::= { bldgHVACEntry 3 }
        
bldgHVACFanSpeed  OBJECT-TYPE
    SYNTAX            Gauge32
    UNITS             "revolutions per minute"
    MAX-ACCESS        read-only
    STATUS            current
    DESCRIPTION
        "Shows the revolutions per minute of the fan.  Fan speed
        will vary based on the difference between
        bldgHVACCfgTemplateDesiredTemp and bldgHVACCurrentTemp.  The
        speed is measured in revolutions of the fan blade per minute."
    ::= { bldgHVACEntry 4 }
        
bldgHVACFanSpeed  OBJECT-TYPE
    SYNTAX            Gauge32
    UNITS             "revolutions per minute"
    MAX-ACCESS        read-only
    STATUS            current
    DESCRIPTION
        "Shows the revolutions per minute of the fan.  Fan speed
        will vary based on the difference between
        bldgHVACCfgTemplateDesiredTemp and bldgHVACCurrentTemp.  The
        speed is measured in revolutions of the fan blade per minute."
    ::= { bldgHVACEntry 4 }
        
bldgHVACCurrentTemp  OBJECT-TYPE
    SYNTAX            Gauge32
    UNITS             "degrees in celsius"
    MAX-ACCESS        read-only
    STATUS            current
    DESCRIPTION
        "The current measured temperature in the office.  Should
        the current temperature be measured at a value of less
        than zero degrees celsius, a read of the instance
        for this object will return a value of zero."
    ::= { bldgHVACEntry 5 }
        
bldgHVACCurrentTemp  OBJECT-TYPE
    SYNTAX            Gauge32
    UNITS             "degrees in celsius"
    MAX-ACCESS        read-only
    STATUS            current
    DESCRIPTION
        "The current measured temperature in the office.  Should
        the current temperature be measured at a value of less
        than zero degrees celsius, a read of the instance
        for this object will return a value of zero."
    ::= { bldgHVACEntry 5 }
        
bldgHVACCoolOrHeatMins  OBJECT-TYPE
    SYNTAX            Counter32
    UNITS             "minutes"
    MAX-ACCESS        read-only
    STATUS            current
    DESCRIPTION
        "The total number of heating or cooling minutes that have
        been consumed since the row was activated.  Notice that
        whether the minutes represent heating or cooling is a
        function of the configuration of this row.  If the system
        is re-initialized from a cooling to heating function or
        vice versa, then the counter would start over again.  This
        effect is similar to a reconfiguration of some network
        interface cards.  When parameters that impact
        configuration are changed, the subsystem must be
        re-initialized.  Discontinuities in the value of this counter
        can occur at re-initialization of the management system,
        and at other times as indicated by the value of
        bldgHVACDiscontinuityTime."
    ::= { bldgHVACEntry 6 }
        
bldgHVACCoolOrHeatMins  OBJECT-TYPE
    SYNTAX            Counter32
    UNITS             "minutes"
    MAX-ACCESS        read-only
    STATUS            current
    DESCRIPTION
        "The total number of heating or cooling minutes that have
        been consumed since the row was activated.  Notice that
        whether the minutes represent heating or cooling is a
        function of the configuration of this row.  If the system
        is re-initialized from a cooling to heating function or
        vice versa, then the counter would start over again.  This
        effect is similar to a reconfiguration of some network
        interface cards.  When parameters that impact
        configuration are changed, the subsystem must be
        re-initialized.  Discontinuities in the value of this counter
        can occur at re-initialization of the management system,
        and at other times as indicated by the value of
        bldgHVACDiscontinuityTime."
    ::= { bldgHVACEntry 6 }
        
bldgHVACDiscontinuityTime OBJECT-TYPE
    SYNTAX      TimeStamp
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The value of sysUpTime on the most recent occasion at which
        any heating or cooling operation for the office designated
        by this row instance experienced a discontinuity.  If
        no such discontinuities have occurred since the last re-
        initialization of the this row, then this object contains a
        zero value."
    ::= { bldgHVACEntry 7 }
        
bldgHVACDiscontinuityTime OBJECT-TYPE
    SYNTAX      TimeStamp
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The value of sysUpTime on the most recent occasion at which
        any heating or cooling operation for the office designated
        by this row instance experienced a discontinuity.  If
        no such discontinuities have occurred since the last re-
        initialization of the this row, then this object contains a
        zero value."
    ::= { bldgHVACEntry 7 }
        
bldgHVACOwner  OBJECT-TYPE
    SYNTAX            SnmpAdminString
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The identity of the operator/system that
        last modified this entry.  When a new entry
        is created, a valid SnmpAdminString must
        be supplied.  If, on the other hand, this
        entry is populated by the agent 'discovering'
        unconfigured rooms, the empty string is a valid
        value for this object."
    ::= { bldgHVACEntry 8 }
        
bldgHVACOwner  OBJECT-TYPE
    SYNTAX            SnmpAdminString
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The identity of the operator/system that
        last modified this entry.  When a new entry
        is created, a valid SnmpAdminString must
        be supplied.  If, on the other hand, this
        entry is populated by the agent 'discovering'
        unconfigured rooms, the empty string is a valid
        value for this object."
    ::= { bldgHVACEntry 8 }
        
bldgHVACStorageType  OBJECT-TYPE
    SYNTAX            StorageType
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The persistence of this row of the table in system storage,
        as it pertains to permanence across system resets.  A columnar
        instance of this object with value 'permanent' need not allow
        write-access to any of the columnar object instances in the
        containing row."
    ::= { bldgHVACEntry 9  }
        
bldgHVACStorageType  OBJECT-TYPE
    SYNTAX            StorageType
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The persistence of this row of the table in system storage,
        as it pertains to permanence across system resets.  A columnar
        instance of this object with value 'permanent' need not allow
        write-access to any of the columnar object instances in the
        containing row."
    ::= { bldgHVACEntry 9  }
        

bldgHVACStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "Controls and reflects the creation and activation status of a row in this table.

bldgHVACStatus对象类型语法RowStatus MAX-ACCESS read create STATUS current DESCRIPTION“控制并反映此表中行的创建和激活状态。

No attempt to modify a row columnar object instance value in

不尝试修改中的行-列对象实例值

        the bldgHVACTable should be issued while the value of
        bldgHVACStatus is active(1).  Should an agent receive a SET
        PDU attempting such a modification in this state, an
        inconsistentValue error should be returned as a result of
        the SET attempt."
    ::= { bldgHVACEntry 10 }
--
-- HVAC Configuration Template Table
--
        
        the bldgHVACTable should be issued while the value of
        bldgHVACStatus is active(1).  Should an agent receive a SET
        PDU attempting such a modification in this state, an
        inconsistentValue error should be returned as a result of
        the SET attempt."
    ::= { bldgHVACEntry 10 }
--
-- HVAC Configuration Template Table
--
        

bldgHVACCfgTemplateInfoTable OBJECT-TYPE SYNTAX SEQUENCE OF BldgHVACCfgTemplateInfoEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table provides unique string identification for HVAC templates in a network. If it were necessary to configure rooms to deliver a particular quality of climate control with regard to cooling or heating, the index string of a row in this table could be the template name. The bldgHVACCfgCfgTemplateInfoDescription contains a brief description of the template service objective such as: provides summer cooling settings for executive offices. The bldgHVACCfgTemplateInfo in the bldgHVACCfgTemplateTable will contain the pointer to the relevant row in this table if it is intended that items that point to a row in the bldgHVACCfgTemplateInfoTable be identifiable as being under template control though this mechanism."

bldgHVACCfgTemplateInfoTable对象类型BldgHVACCfgTemplateInfoEntry的语法序列MAX-ACCESS不可访问状态当前描述“此表提供网络中HVAC模板的唯一字符串标识。如果需要配置房间以提供有关制冷或供热的特定质量的气候控制,则此表中一行的索引字符串可以是模板名称。bldgHVACCfgCfgTemplateInfoDescription包含模板服务目标的简要说明,例如:为行政办公室提供夏季制冷设置。bldgHVACCfgTemplateInfo表中的bldgHVACCfgTemplateInfo将包含指向此表中相关行的指针,前提是指向bldgHVACCfgTemplateInfoTable中某行的项目可以通过此机制识别为受模板控制。”

    ::= { bldgHVACObjects 2 }
        
    ::= { bldgHVACObjects 2 }
        
bldgHVACCfgTemplateInfoEntry  OBJECT-TYPE
    SYNTAX       BldgHVACCfgTemplateInfoEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
        "Each row represents a particular template and
        description.  A given row instance can be created or
        deleted by set operations upon its
        bldgHVACCfgTemplateInfoStatus columnar object
        instance."
    INDEX { bldgHVACCfgTemplateInfoIndex }
    ::= { bldgHVACCfgTemplateInfoTable 1 }
        
bldgHVACCfgTemplateInfoEntry  OBJECT-TYPE
    SYNTAX       BldgHVACCfgTemplateInfoEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
        "Each row represents a particular template and
        description.  A given row instance can be created or
        deleted by set operations upon its
        bldgHVACCfgTemplateInfoStatus columnar object
        instance."
    INDEX { bldgHVACCfgTemplateInfoIndex }
    ::= { bldgHVACCfgTemplateInfoTable 1 }
        
BldgHVACCfgTemplateInfoEntry ::= SEQUENCE {
        bldgHVACCfgTemplateInfoIndex          Unsigned32,
        bldgHVACCfgTemplateInfoID             SnmpAdminString,
        
BldgHVACCfgTemplateInfoEntry ::= SEQUENCE {
        bldgHVACCfgTemplateInfoIndex          Unsigned32,
        bldgHVACCfgTemplateInfoID             SnmpAdminString,
        

bldgHVACCfgTemplateInfoDescr SnmpAdminString, bldgHVACCfgTemplateInfoOwner SnmpAdminString, bldgHVACCfgTemplateInfoStatus RowStatus, bldgHVACCfgTemplateInfoStorType StorageType }

bldgHVACCfgTemplateInfoDescr snmpadmin安装,bldgHVACCfgTemplateInfoOwner snmpadmin安装,bldgHVACCfgTemplateInfoStatus行状态,bldgHVACCfgTemplateInfoStorType存储类型}

bldgHVACCfgTemplateInfoIndex   OBJECT-TYPE
       SYNTAX       Unsigned32 (1..2147483647)
       MAX-ACCESS   not-accessible
       STATUS       current
       DESCRIPTION
           "The unique index to a row in this table."
        ::= { bldgHVACCfgTemplateInfoEntry 1 }
        
bldgHVACCfgTemplateInfoIndex   OBJECT-TYPE
       SYNTAX       Unsigned32 (1..2147483647)
       MAX-ACCESS   not-accessible
       STATUS       current
       DESCRIPTION
           "The unique index to a row in this table."
        ::= { bldgHVACCfgTemplateInfoEntry 1 }
        
bldgHVACCfgTemplateInfoID  OBJECT-TYPE
    SYNTAX       SnmpAdminString
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
        "Textual identifier for this table row, and, consequently
        the template.  This should be a unique name within
        an administrative domain for a particular template so that
        all systems in a network that are under the same template
        can have the same 'handle' (e.g., 'Executive Offices',
        'Lobby Areas')."
    ::= { bldgHVACCfgTemplateInfoEntry 2 }
        
bldgHVACCfgTemplateInfoID  OBJECT-TYPE
    SYNTAX       SnmpAdminString
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
        "Textual identifier for this table row, and, consequently
        the template.  This should be a unique name within
        an administrative domain for a particular template so that
        all systems in a network that are under the same template
        can have the same 'handle' (e.g., 'Executive Offices',
        'Lobby Areas')."
    ::= { bldgHVACCfgTemplateInfoEntry 2 }
        
bldgHVACCfgTemplateInfoDescr   OBJECT-TYPE
    SYNTAX       SnmpAdminString
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
        "A general description of the template.  One example might
        be - Controls the cooling for offices on higher floors
        during the summer."
    ::= { bldgHVACCfgTemplateInfoEntry 3 }
        
bldgHVACCfgTemplateInfoDescr   OBJECT-TYPE
    SYNTAX       SnmpAdminString
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
        "A general description of the template.  One example might
        be - Controls the cooling for offices on higher floors
        during the summer."
    ::= { bldgHVACCfgTemplateInfoEntry 3 }
        
bldgHVACCfgTemplateInfoOwner  OBJECT-TYPE
    SYNTAX            SnmpAdminString
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The identity of the operator/system that last modified
        this entry."
    ::= { bldgHVACCfgTemplateInfoEntry 4 }
        
bldgHVACCfgTemplateInfoOwner  OBJECT-TYPE
    SYNTAX            SnmpAdminString
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The identity of the operator/system that last modified
        this entry."
    ::= { bldgHVACCfgTemplateInfoEntry 4 }
        

bldgHVACCfgTemplateInfoStatus OBJECT-TYPE

bldgHVACCfgTemplateInfoStatus对象类型

SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "The activation status of this row.

语法RowStatus MAX-ACCESS read create STATUS current DESCRIPTION“此行的激活状态。

        No attempt to modify a row columnar object instance value in
        the bldgHVACCfgTemplateInfo Table should be issued while the
        value of bldgHVACCfgTemplateInfoStatus is active(1).
        Should an agent receive a SET PDU attempting such a modification
        in this state, an inconsistentValue error should be returned as
        a result of the SET attempt."
    ::= { bldgHVACCfgTemplateInfoEntry 5 }
        
        No attempt to modify a row columnar object instance value in
        the bldgHVACCfgTemplateInfo Table should be issued while the
        value of bldgHVACCfgTemplateInfoStatus is active(1).
        Should an agent receive a SET PDU attempting such a modification
        in this state, an inconsistentValue error should be returned as
        a result of the SET attempt."
    ::= { bldgHVACCfgTemplateInfoEntry 5 }
        
bldgHVACCfgTemplateInfoStorType   OBJECT-TYPE
    SYNTAX            StorageType
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The persistence of this row of the table in system storage,
         as it pertains to permanence across system resets.  A columnar
        instance of this object with value 'permanent' need not allow
        write-access to any of the columnar object instances in the
        containing row."
    ::= { bldgHVACCfgTemplateInfoEntry 6  }
        
bldgHVACCfgTemplateInfoStorType   OBJECT-TYPE
    SYNTAX            StorageType
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The persistence of this row of the table in system storage,
         as it pertains to permanence across system resets.  A columnar
        instance of this object with value 'permanent' need not allow
        write-access to any of the columnar object instances in the
        containing row."
    ::= { bldgHVACCfgTemplateInfoEntry 6  }
        
--
-- HVAC Configuration Template Table
--
bldgHVACCfgTemplateTable    OBJECT-TYPE
    SYNTAX      SEQUENCE OF BldgHVACCfgTemplateEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains the templates, which
        can be used to set defaults that will
        be applied to specific offices.  The application
        of those values is accomplished by having a row
        instance of the bldgHVACTable reference a row of
        this table (by the value of the former's
        bldgHVACCfgTemplate columnar instance).  Identifying
        information concerning a row instance of this table
        can be found in the columnar data of the row instance
        of the bldgHVACCfgTemplateInfoTable entry referenced
        by the bldgHVACCfgTemplateInfo columnar object of
        this table."
    ::= { bldgHVACObjects 3 }
        
--
-- HVAC Configuration Template Table
--
bldgHVACCfgTemplateTable    OBJECT-TYPE
    SYNTAX      SEQUENCE OF BldgHVACCfgTemplateEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains the templates, which
        can be used to set defaults that will
        be applied to specific offices.  The application
        of those values is accomplished by having a row
        instance of the bldgHVACTable reference a row of
        this table (by the value of the former's
        bldgHVACCfgTemplate columnar instance).  Identifying
        information concerning a row instance of this table
        can be found in the columnar data of the row instance
        of the bldgHVACCfgTemplateInfoTable entry referenced
        by the bldgHVACCfgTemplateInfo columnar object of
        this table."
    ::= { bldgHVACObjects 3 }
        

bldgHVACCfgTemplateEntry OBJECT-TYPE SYNTAX BldgHVACCfgTemplateEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Each row represents a single set of template parameters that can be applied to selected instances - in this case offices. These policies will be turned on and off by the policy module through its scheduling facilities.

bldgHVACCfgTemplateEntry对象类型语法bldgHVACCfgTemplateEntry MAX-ACCESS不可访问状态当前描述“每行表示一组可应用于选定实例(在本例中为办公室)的模板参数。这些策略将由策略模块通过其调度工具打开和关闭。

        A given row instance can be created or
        deleted by set operations upon its
        bldgHVACCfgTemplateStatus columnar object instance."
    INDEX { bldgHVACCfgTemplateIndex }
    ::= { bldgHVACCfgTemplateTable 1 }
        
        A given row instance can be created or
        deleted by set operations upon its
        bldgHVACCfgTemplateStatus columnar object instance."
    INDEX { bldgHVACCfgTemplateIndex }
    ::= { bldgHVACCfgTemplateTable 1 }
        
BldgHVACCfgTemplateEntry ::= SEQUENCE {
        bldgHVACCfgTemplateIndex           Unsigned32,
        bldgHVACCfgTemplateDesiredTemp     Gauge32,
        bldgHVACCfgTemplateCoolOrHeat      BldgHvacOperation,
        bldgHVACCfgTemplateInfo            Unsigned32,
        bldgHVACCfgTemplateOwner           SnmpAdminString,
        bldgHVACCfgTemplateStorage         StorageType,
        bldgHVACCfgTemplateStatus          RowStatus
}
        
BldgHVACCfgTemplateEntry ::= SEQUENCE {
        bldgHVACCfgTemplateIndex           Unsigned32,
        bldgHVACCfgTemplateDesiredTemp     Gauge32,
        bldgHVACCfgTemplateCoolOrHeat      BldgHvacOperation,
        bldgHVACCfgTemplateInfo            Unsigned32,
        bldgHVACCfgTemplateOwner           SnmpAdminString,
        bldgHVACCfgTemplateStorage         StorageType,
        bldgHVACCfgTemplateStatus          RowStatus
}
        
bldgHVACCfgTemplateIndex    OBJECT-TYPE
    SYNTAX      Unsigned32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A unique value for each defined template in this
        table.  This value can be referenced as a row index
        by any MIB module that needs access to this information.
        The bldgHVACCfgTemplate will point to entries in this
        table."
    ::= { bldgHVACCfgTemplateEntry 1 }
        
bldgHVACCfgTemplateIndex    OBJECT-TYPE
    SYNTAX      Unsigned32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A unique value for each defined template in this
        table.  This value can be referenced as a row index
        by any MIB module that needs access to this information.
        The bldgHVACCfgTemplate will point to entries in this
        table."
    ::= { bldgHVACCfgTemplateEntry 1 }
        

bldgHVACCfgTemplateDesiredTemp OBJECT-TYPE SYNTAX Gauge32 UNITS "degrees in celsius" MAX-ACCESS read-create STATUS current DESCRIPTION "This is the desired temperature setting. It might be changed at different times of the day or based on seasonal conditions. It is permitted to change this value by first moving the row to an inactive state, making the

bldgHVACCfgTemplateDesiredTemp对象类型语法量表32单位“摄氏度”最大访问读取创建状态当前描述“这是所需的温度设置。它可能会在一天中的不同时间或根据季节条件而改变。允许通过首先将行移动到非活动状态来更改此值,使

        change and then reactivating the row."
    ::= { bldgHVACCfgTemplateEntry 2 }
        
        change and then reactivating the row."
    ::= { bldgHVACCfgTemplateEntry 2 }
        
bldgHVACCfgTemplateCoolOrHeat  OBJECT-TYPE
    SYNTAX             BldgHvacOperation
    MAX-ACCESS         read-create
    STATUS             current
    DESCRIPTION
        "This controls the heating and cooling mechanism and is
        set-able by building maintenance.  It is permitted to
        change this value by first moving the row to an inactive
        state, making the change and then reactivating the row."
    ::= { bldgHVACCfgTemplateEntry 3 }
        
bldgHVACCfgTemplateCoolOrHeat  OBJECT-TYPE
    SYNTAX             BldgHvacOperation
    MAX-ACCESS         read-create
    STATUS             current
    DESCRIPTION
        "This controls the heating and cooling mechanism and is
        set-able by building maintenance.  It is permitted to
        change this value by first moving the row to an inactive
        state, making the change and then reactivating the row."
    ::= { bldgHVACCfgTemplateEntry 3 }
        
bldgHVACCfgTemplateInfo OBJECT-TYPE
    SYNTAX             Unsigned32
    MAX-ACCESS         read-create
    STATUS             current
    DESCRIPTION
        "This object points to a row in the
        bldgHVACCfgTemplateInfoTable.  This controls the
        heating and cooling mechanism and is set-able by
        building maintenance.  It is permissible to change
        this value by first moving the row to an inactive
        state, making the change and then reactivating
        the row.  A value of zero means that this entry
        is not associated with a named template found
        in the bldgHVACCfgTemplateInfoTable."
    ::= { bldgHVACCfgTemplateEntry 4 }
        
bldgHVACCfgTemplateInfo OBJECT-TYPE
    SYNTAX             Unsigned32
    MAX-ACCESS         read-create
    STATUS             current
    DESCRIPTION
        "This object points to a row in the
        bldgHVACCfgTemplateInfoTable.  This controls the
        heating and cooling mechanism and is set-able by
        building maintenance.  It is permissible to change
        this value by first moving the row to an inactive
        state, making the change and then reactivating
        the row.  A value of zero means that this entry
        is not associated with a named template found
        in the bldgHVACCfgTemplateInfoTable."
    ::= { bldgHVACCfgTemplateEntry 4 }
        
bldgHVACCfgTemplateOwner  OBJECT-TYPE
    SYNTAX            SnmpAdminString
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The identity of the administrative entity
        that created this row of the table."
    ::= { bldgHVACCfgTemplateEntry 5 }
        
bldgHVACCfgTemplateOwner  OBJECT-TYPE
    SYNTAX            SnmpAdminString
    MAX-ACCESS        read-create
    STATUS            current
    DESCRIPTION
        "The identity of the administrative entity
        that created this row of the table."
    ::= { bldgHVACCfgTemplateEntry 5 }
        

bldgHVACCfgTemplateStorage OBJECT-TYPE SYNTAX StorageType MAX-ACCESS read-create STATUS current DESCRIPTION "The persistence of this row of the table across system resets. A columnar instance of this object with value 'permanent' need not allow write-access to any of the columnar object instances in the containing row."

bldgHVACCfgTemplateStorage对象类型语法StorageType MAX-ACCESS read create STATUS current DESCRIPTION“跨系统重置此表行的持久性。此对象的值为“permanent”的列对象实例不需要允许对包含行中的任何列对象实例进行写访问。”

    ::= { bldgHVACCfgTemplateEntry 6 }
        
    ::= { bldgHVACCfgTemplateEntry 6 }
        

bldgHVACCfgTemplateStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "The activation status of this row of the table.

bldgHVACCfgTemplateStatus对象类型语法RowStatus MAX-ACCESS read create STATUS current DESCRIPTION“表此行的激活状态。

        No attempt to modify a row columnar object instance value in
        the bldgHVACCfgTemplateTable should be issued while the
        value of bldgHVACCfgTemplateStatus is active(1).
        Should an agent receive a SET PDU attempting such a modification
        in this state, an inconsistentValue error should be returned as
        a result of the SET attempt."
    ::= { bldgHVACCfgTemplateEntry 7 }
        
        No attempt to modify a row columnar object instance value in
        the bldgHVACCfgTemplateTable should be issued while the
        value of bldgHVACCfgTemplateStatus is active(1).
        Should an agent receive a SET PDU attempting such a modification
        in this state, an inconsistentValue error should be returned as
        a result of the SET attempt."
    ::= { bldgHVACCfgTemplateEntry 7 }
        

-- -- Conformance Information --

----一致性信息--

bldgCompliances  OBJECT IDENTIFIER ::= { bldgConformance 1 }
bldgGroups       OBJECT IDENTIFIER ::= { bldgConformance 2 }
        
bldgCompliances  OBJECT IDENTIFIER ::= { bldgConformance 1 }
bldgGroups       OBJECT IDENTIFIER ::= { bldgConformance 2 }
        

-- Compliance Statements

--合规声明

bldgCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The requirements for conformance to the BLDG-HVAC-MIB. The bldgHVACObjects group must be implemented to conform to the BLDG-HVAC-MIB." MODULE -- this module

BLDG合规模块-合规状态当前描述“符合BLDG-HVAC-MIB的要求。必须实施bldgHVACObjects组以符合BLDG-HVAC-MIB。”模块——本模块

    GROUP bldgHVACObjectsGroup
    DESCRIPTION
        "The bldgHVACObjects is mandatory for all systems that
        support HVAC systems."
    ::= { bldgCompliances 1 }
        
    GROUP bldgHVACObjectsGroup
    DESCRIPTION
        "The bldgHVACObjects is mandatory for all systems that
        support HVAC systems."
    ::= { bldgCompliances 1 }
        

bldgHVACObjectsGroup OBJECT-GROUP OBJECTS { bldgHVACCfgTemplate, bldgHVACFanSpeed, bldgHVACCurrentTemp, bldgHVACCoolOrHeatMins, bldgHVACDiscontinuityTime, bldgHVACOwner, bldgHVACStatus, bldgHVACStorageType, bldgHVACCfgTemplateInfoID, bldgHVACCfgTemplateInfoDescr, bldgHVACCfgTemplateInfoOwner,

bldgHVACObjectsGroup对象组对象{BLDGHVACFGTemplate,bldgHVACFanSpeed,bldgHVACCurrentTemp,BLDGHVAccolorHeatMins,BLDGHVACIntercontinuctionTime,bldgHVACOwner,bldgHVACStatus,bldgHVACStorageType,BLDGHVACFGTemplateInfoId,BLDGHVACFGTemplateInfodescr,BLDGHVACFGTemplateInfoOwner,

        bldgHVACCfgTemplateInfoStatus,
        bldgHVACCfgTemplateInfoStorType,
        bldgHVACCfgTemplateDesiredTemp,
        bldgHVACCfgTemplateCoolOrHeat,
        bldgHVACCfgTemplateInfo,
        bldgHVACCfgTemplateOwner,bldgHVACCfgTemplateStorage,
        bldgHVACCfgTemplateStatus
    }
    STATUS current
    DESCRIPTION
        "The bldgHVACObjects Group."
    ::= { bldgGroups 1 }
        
        bldgHVACCfgTemplateInfoStatus,
        bldgHVACCfgTemplateInfoStorType,
        bldgHVACCfgTemplateDesiredTemp,
        bldgHVACCfgTemplateCoolOrHeat,
        bldgHVACCfgTemplateInfo,
        bldgHVACCfgTemplateOwner,bldgHVACCfgTemplateStorage,
        bldgHVACCfgTemplateStatus
    }
    STATUS current
    DESCRIPTION
        "The bldgHVACObjects Group."
    ::= { bldgGroups 1 }
        

END

终止

8.2. Notes on MIB Module with Template-based Data
8.2. 关于基于模板数据的MIB模块的注记

The primary purpose of the example "HVAC" MIB module is to show how to construct a single module that includes configuration, template, counter and state information in a single module. If this were a 'real' module we would also have included definitions for notifications for the configuration change operations as previously described. We also would have included notifications for faults and other counter threshold events.

示例“HVAC”MIB模块的主要目的是展示如何构建单个模块,其中包括单个模块中的配置、模板、计数器和状态信息。如果这是一个“真正的”模块,我们还将包括前面描述的配置更改操作通知的定义。我们还将包括故障和其他计数器阈值事件的通知。

Implementation and Instance Extensions:

实现和实例扩展:

Just as with networking technologies, vendors may wish to add extensions that can distinguish their products from the competition. If an HVAC vendor also wanted to support humidity control, they could add that facility to their equipment and use AUGMENTS for the bldgHVACTemplateTable with two objects, one that indicates the desired humidity and the other, the actual. The bldgHVACTemplateTable could also be extended using this same approach so that HVAC policies could easily be extended to support this vendor.

与网络技术一样,供应商可能希望添加能够将其产品与竞争对手区分开来的扩展。如果HVAC供应商也希望支持湿度控制,他们可以将该设施添加到设备中,并使用两个对象(一个表示所需湿度,另一个表示实际湿度)对bldgHVACTemplateTable进行增强。bldgHVACTemplateTable也可以使用相同的方法进行扩展,以便可以轻松地扩展HVAC策略以支持该供应商。

8.3. Examples of Usage of the MIB
8.3. MIB的使用示例

The following two examples use two templates to configure the temperature in executive offices and in conference rooms. The "conference rooms" template is applied to all conference rooms (which happen to be office 104 on each floor), and the "executive offices" template is applied to executive offices.

以下两个示例使用两个模板来配置执行办公室和会议室中的温度。“会议室”模板适用于所有会议室(每层恰好是104号办公室),“执行办公室”模板适用于执行办公室。

If offices 24, 25, and 26 on the third floor are executive offices, the values in the bldgHVACTable might be:

如果三楼的24号、25号和26号办公室为行政办公室,则BLDGH ACTABLE中的值可能为:

   bldgHVACCfgTemplate.3.24 = 2
   bldgHVACFanSpeed.3.24 = 2989
   bldgHVACCurrentTemp.3.24 = 24
   bldgHVACCoolOrHeatMins.3.24 = 123
   bldgHVACDiscontinuityTime.3.24 = sysUpTime + 12h + 21m
   bldgHVACOwner.3.24 = "policy engine"
   bldgHVACStorageType.3.24 = nonVolatile(3)
   bldgHVACStatus.3.24 = active(1)
        
   bldgHVACCfgTemplate.3.24 = 2
   bldgHVACFanSpeed.3.24 = 2989
   bldgHVACCurrentTemp.3.24 = 24
   bldgHVACCoolOrHeatMins.3.24 = 123
   bldgHVACDiscontinuityTime.3.24 = sysUpTime + 12h + 21m
   bldgHVACOwner.3.24 = "policy engine"
   bldgHVACStorageType.3.24 = nonVolatile(3)
   bldgHVACStatus.3.24 = active(1)
        
   bldgHVACCfgTemplate.3.25 = 2
   bldgHVACFanSpeed.3.25 = 0
   bldgHVACCurrentTemp.3.25 = 22
   bldgHVACCoolOrHeatMins.3.25 = 298
   bldgHVACDiscontinuityTime.3.25 = sysUpTime + 4h + 2m
   bldgHVACOwner.3.25 = "policy engine"
   bldgHVACStorageType.3.25 = nonVolatile(3)
   bldgHVACStatus.3.25 = active(1)
        
   bldgHVACCfgTemplate.3.25 = 2
   bldgHVACFanSpeed.3.25 = 0
   bldgHVACCurrentTemp.3.25 = 22
   bldgHVACCoolOrHeatMins.3.25 = 298
   bldgHVACDiscontinuityTime.3.25 = sysUpTime + 4h + 2m
   bldgHVACOwner.3.25 = "policy engine"
   bldgHVACStorageType.3.25 = nonVolatile(3)
   bldgHVACStatus.3.25 = active(1)
        
   bldgHVACCfgTemplate.3.26 = 2
   bldgHVACFanSpeed.3.26 = 0
   bldgHVACCurrentTemp.3.26 = 22
   bldgHVACCoolOrHeatMins.3.26 = 982
   bldgHVACOwner.3.26 = "policy engine"
   bldgHVACStorageType.3.26 = nonVolatile(3)
   bldgHVACStatus.3.26 = active(1)
        
   bldgHVACCfgTemplate.3.26 = 2
   bldgHVACFanSpeed.3.26 = 0
   bldgHVACCurrentTemp.3.26 = 22
   bldgHVACCoolOrHeatMins.3.26 = 982
   bldgHVACOwner.3.26 = "policy engine"
   bldgHVACStorageType.3.26 = nonVolatile(3)
   bldgHVACStatus.3.26 = active(1)
        

The second entry in the bldgHVACCfgTemplateTable, to which all of the above point, might have the following configuration:

bldgHVACCfgTemplateTable中的第二个条目(上面所有点都指向该条目)可能具有以下配置:

   bldgHVACCfgTemplateDesiredTemp.2 = 22
   bldgHVACCfgTemplateCoolOrHeat.2 = cool(2)
   bldgHVACCfgTemplateInfo.2 = 2
   bldgHVACCfgTemplateOwner.2 = "Senior Executive assistant"
   bldgHVACCfgTemplateStorage.2 = nonVolatile(3)
   bldgHVACCfgTemplateStatus.2 = active(1)
        
   bldgHVACCfgTemplateDesiredTemp.2 = 22
   bldgHVACCfgTemplateCoolOrHeat.2 = cool(2)
   bldgHVACCfgTemplateInfo.2 = 2
   bldgHVACCfgTemplateOwner.2 = "Senior Executive assistant"
   bldgHVACCfgTemplateStorage.2 = nonVolatile(3)
   bldgHVACCfgTemplateStatus.2 = active(1)
        

and the associated template information ("executive offices") might be:

相关模板信息(“执行办公室”)可能是:

bldgHVACCfgTemplateInfoID.2 = "executive offices" bldgHVACCfgTemplateInfoDescr.2 = "Controls temperature for executive offices" bldgHVACCfgTemplateInfoOwner.2 = "Senior Executive assistant" bldgHVACCfgTemplateInfoStorType.2 = nonVolatile(3) bldgHVACCfgTemplateInfoStatus.2 = active(1)

bldgHVACCfgTemplateInfoID.2=“行政办公室”bldgHVACCfgTemplateInfoDescr.2=“控制行政办公室的温度”bldgHVACCfgTemplateInfoOwner.2=“高级行政助理”bldgHVACCfgTemplateInfoStorType.2=非易失性(3)bldgHVACCfgTemplateInfoStatus.2=活动(1)

The policy engine can now associate instances of executive offices with the template called "executive offices" and apply the values in the second entry of the bldgHVACCfgTemplateTable to each of the instances of the executive offices. This will then attempt to set the temperature in executive offices to 22 degrees celsius.

策略引擎现在可以将执行办公室实例与名为“执行办公室”的模板相关联,并将bldgHVACCfgTemplateTable第二项中的值应用于执行办公室的每个实例。这将试图将行政办公室的温度设置为22摄氏度。

It is also possible that there may be an office configured for a particular temperature, but without using a template. For example, office 28 on the third floor might look like this:

也可能存在针对特定温度配置的办公室,但不使用模板。例如,三楼的28号办公室可能是这样的:

   bldgHVACCfgTemplate.3.28 = 3
   bldgHVACFanSpeed.3.28 = 50
   bldgHVACCurrentTemp.3.28 = 26
   bldgHVACCoolOrHeatMins.3.28 = 0
   bldgHVACDiscontinuityTime.3.28 = 0
   bldgHVACOwner.3.28 = "Executive with poor circulation"
   bldgHVACStorageType.3.28 = nonVolatile(3)
   bldgHVACStatus.3.28 = active(1)
        
   bldgHVACCfgTemplate.3.28 = 3
   bldgHVACFanSpeed.3.28 = 50
   bldgHVACCurrentTemp.3.28 = 26
   bldgHVACCoolOrHeatMins.3.28 = 0
   bldgHVACDiscontinuityTime.3.28 = 0
   bldgHVACOwner.3.28 = "Executive with poor circulation"
   bldgHVACStorageType.3.28 = nonVolatile(3)
   bldgHVACStatus.3.28 = active(1)
        

The entry in the bldgHVACCfgTemplateTable (to which bldgHVACCfgTemplate.3.28 points) might instead look like:

bldgHVACCfgTemplate表中的条目(bldgHVACCfgTemplate.3.28指向该条目)可能会改为如下所示:

   bldgHVACCfgTemplateDesiredTemp.3 = 28
   bldgHVACCfgTemplateCoolOrHeat.3 = cool(2)
   bldgHVACCfgTemplateInfo.3 = 0.0
   bldgHVACCfgTemplateOwner.3 = "Executive with poor circulation"
   bldgHVACCfgTemplateStorage.3 = nonVolatile(3)
   bldgHVACCfgTemplateStatus.3 = active(1)
        
   bldgHVACCfgTemplateDesiredTemp.3 = 28
   bldgHVACCfgTemplateCoolOrHeat.3 = cool(2)
   bldgHVACCfgTemplateInfo.3 = 0.0
   bldgHVACCfgTemplateOwner.3 = "Executive with poor circulation"
   bldgHVACCfgTemplateStorage.3 = nonVolatile(3)
   bldgHVACCfgTemplateStatus.3 = active(1)
        

Note that this entry does not point to a template.

请注意,此条目不指向模板。

If the executive's circulation improves so that the temperature should be aligned with other executive offices, this is accomplished by changing the value of bldgHVACCfgTemplate.3.28 from bldgHVACCfgTemplateInfoID.3 to bldgHVACCfgTemplateInfoID.2 (shown above).

如果行政人员的循环改善,因此温度应与其他行政办公室一致,则可通过将bldgHVACCfgTemplate.3.28的值从bldgHVACCfgTemplateInfoID.3更改为bldgHVACCfgTemplateInfoID.2(如上所示)来实现。

Finally, there might be offices for which there is no configured temperature but management applications can read the current temperature, fan speed, and cooling or heating minutes from the bldgHVACTable. In that case, the value of bldgHVACCfgTemplate will be a zero index ("null"), as will the value of bldgHVACOwner.

最后,有些办公室可能没有配置温度,但管理应用程序可以从bldgHVACTable读取当前温度、风扇转速以及冷却或加热分钟数。在这种情况下,bldgHVACCfgTemplate的值将是零索引(“null”),bldgHVACOwner的值也是如此。

   bldgHVACCfgTemplate.4.2 = 0
   bldgHVACFanSpeed.3.28 = 50
   bldgHVACCurrentTemp.3.28 = 26
   bldgHVACCoolOrHeatMins.3.28 = 0
   bldgHVACDiscontinuityTime.3.28 = 0
   bldgHVACOwner.3.28 = ""
   bldgHVACStorageType.3.28 = nonVolatile(3)
   bldgHVACStatus.3.28 = active(1)
        
   bldgHVACCfgTemplate.4.2 = 0
   bldgHVACFanSpeed.3.28 = 50
   bldgHVACCurrentTemp.3.28 = 26
   bldgHVACCoolOrHeatMins.3.28 = 0
   bldgHVACDiscontinuityTime.3.28 = 0
   bldgHVACOwner.3.28 = ""
   bldgHVACStorageType.3.28 = nonVolatile(3)
   bldgHVACStatus.3.28 = active(1)
        

As a second example, the conference rooms on several floors are configured using the "conference rooms" template. When the values in the bldgHVACTable pertaining to conference rooms are read, it might look like:

作为第二个示例,使用“会议室”模板配置多个楼层上的会议室。读取bldgHVACTable中与会议室相关的值时,可能会出现以下情况:

   bldgHVACCfgTemplate.12.104 = bldgHVACCfgTemplateDesiredTemp.1
   bldgHVACFanSpeed.12.104 = 1423
   bldgHVACCurrentTemp.12.104 = 21
   bldgHVACCoolOrHeatMins.12.104 = 2193
   bldgHVACDiscontinuityTime.12.104 = sysUpTime + 36h + 15m
   bldgHVACOwner.12.104 =  = "Bob the Conference Guy"
   bldgHVACStorageType.12.104 = nonVolatile(3)
   bldgHVACStatus.12.104 = active(1)
        
   bldgHVACCfgTemplate.12.104 = bldgHVACCfgTemplateDesiredTemp.1
   bldgHVACFanSpeed.12.104 = 1423
   bldgHVACCurrentTemp.12.104 = 21
   bldgHVACCoolOrHeatMins.12.104 = 2193
   bldgHVACDiscontinuityTime.12.104 = sysUpTime + 36h + 15m
   bldgHVACOwner.12.104 =  = "Bob the Conference Guy"
   bldgHVACStorageType.12.104 = nonVolatile(3)
   bldgHVACStatus.12.104 = active(1)
        
   bldgHVACCfgTemplate.14.104 = bldgHVACCfgTemplateDesiredTemp.1
   bldgHVACFanSpeed.14.104 = 1203
   bldgHVACCurrentTemp.14.104 = 20
   bldgHVACCoolOrHeatMins.14.104 = 293
   bldgHVACDiscontinuityTime.14.104 = sysUpTime + 5h + 54m
   bldgHVACOwner.14.104 =  = "Bob the Conference Guy"
   bldgHVACStorageType.14.104 = nonVolatile(3)
   bldgHVACStatus.14.104 = active(1)
        
   bldgHVACCfgTemplate.14.104 = bldgHVACCfgTemplateDesiredTemp.1
   bldgHVACFanSpeed.14.104 = 1203
   bldgHVACCurrentTemp.14.104 = 20
   bldgHVACCoolOrHeatMins.14.104 = 293
   bldgHVACDiscontinuityTime.14.104 = sysUpTime + 5h + 54m
   bldgHVACOwner.14.104 =  = "Bob the Conference Guy"
   bldgHVACStorageType.14.104 = nonVolatile(3)
   bldgHVACStatus.14.104 = active(1)
        
   bldgHVACCfgTemplate.15.104 = bldgHVACCfgTemplateDesiredTemp.1
   bldgHVACFanSpeed.15.104 = 12
   bldgHVACCurrentTemp.15.104 = 19
   bldgHVACCoolOrHeatMins.15.104 = 1123
   bldgHVACDiscontinuityTime.15.103 = sysUpTime + 2d + 2h + 7m
   bldgHVACOwner.15.104 =  = "Bob the Conference Guy"
   bldgHVACStorageType.15.104 = nonVolatile(3)
   bldgHVACStatus.15.104 = active(1)
        
   bldgHVACCfgTemplate.15.104 = bldgHVACCfgTemplateDesiredTemp.1
   bldgHVACFanSpeed.15.104 = 12
   bldgHVACCurrentTemp.15.104 = 19
   bldgHVACCoolOrHeatMins.15.104 = 1123
   bldgHVACDiscontinuityTime.15.103 = sysUpTime + 2d + 2h + 7m
   bldgHVACOwner.15.104 =  = "Bob the Conference Guy"
   bldgHVACStorageType.15.104 = nonVolatile(3)
   bldgHVACStatus.15.104 = active(1)
        

The desired temperature and whether to heat or cool is configured in the first entry of the bldgHVACCfgTemplateTable, which tries to set the temperature to 19 degrees celsius in conference rooms:

在bldgHVACCfgTemplateTable的第一个条目中配置了所需的温度以及是加热还是冷却,该条目尝试将会议室的温度设置为19摄氏度:

   bldgHVACCfgTemplateDesiredTemp.1 = 19
   bldgHVACCfgTemplateCoolOrHeat.1 = cool(2)
   bldgHVACCfgTemplateInfo.1 = bldgHVACCfgTemplateInfoID.1
   bldgHVACCfgTemplateOwner.1 = "Bob the Conference Guy"
   bldgHVACCfgTemplateStorage.1 = nonVolatile(3)
   bldgHVACCfgTemplateStatus.1 = active(1)
        
   bldgHVACCfgTemplateDesiredTemp.1 = 19
   bldgHVACCfgTemplateCoolOrHeat.1 = cool(2)
   bldgHVACCfgTemplateInfo.1 = bldgHVACCfgTemplateInfoID.1
   bldgHVACCfgTemplateOwner.1 = "Bob the Conference Guy"
   bldgHVACCfgTemplateStorage.1 = nonVolatile(3)
   bldgHVACCfgTemplateStatus.1 = active(1)
        

The associated template information would then have:

然后,关联的模板信息将具有:

   bldgHVACCfgTemplateInfoID.1 = "conference rooms"
   bldgHVACCfgTemplateInfoDescr.1 = "Controls temperature in conference
   rooms" bldgHVACCfgTemplateInfoOwner.1 = "Bob the Conference Guy"
   bldgHVACCfgTemplateInfoStorType.1 = nonVolatile(3)
   bldgHVACCfgTemplateInfoStatus.1 = active(1)
        
   bldgHVACCfgTemplateInfoID.1 = "conference rooms"
   bldgHVACCfgTemplateInfoDescr.1 = "Controls temperature in conference
   rooms" bldgHVACCfgTemplateInfoOwner.1 = "Bob the Conference Guy"
   bldgHVACCfgTemplateInfoStorType.1 = nonVolatile(3)
   bldgHVACCfgTemplateInfoStatus.1 = active(1)
        

The policy system can then apply this template (cool to 19 degrees Celsius) to its notion of all of the conference rooms in the building.

然后,政策系统可以将此模板(冷却到19摄氏度)应用到大楼中所有会议室的概念中。

9. Security Considerations
9. 安全考虑

This document discusses practices and methods for using the SNMP for management and distribution of configuration information for network elements. Any effective use of the SNMP in this application must concern itself with issues of authentication of the management entities initiating configuration change and management, in addition to the integrity of the configuration data itself. Other more subtle considerations also exist.

本文档讨论使用SNMP管理和分发网元配置信息的实践和方法。在该应用程序中有效使用SNMP,除了配置数据本身的完整性外,还必须考虑发起配置更改和管理的管理实体的身份验证问题。还有其他更微妙的考虑。

To that end, the section of this document entitled "Deployment and Security Issues" covers these security considerations to the extent they affect the current practices described throughout this document. In particular, in the subsection entitled "Secure Agent Considerations", there is a recommendation for the usage of Version 3 of the SNMP, and its essential presumption as a foundation for other practices described throughout. With the exception of a small number of cases where a mention is made to the contrary to illustrate techniques for coexistence with application entities dependent upon earlier versions of the SNMP, that recommendation of usage of Version 3 of the SNMP is reiterated here.

为此,本文件题为“部署和安全问题”的一节涵盖了这些安全考虑因素,这些安全考虑因素影响了本文件所述的现行做法。特别地,在题为“安全代理考虑”的小节中,建议使用SNMP的版本3,并将其基本假定作为整个描述的其他实践的基础。除了少数情况(其中提及相反的内容以说明与依赖于SNMP早期版本的应用程序实体共存的技术)外,此处重申使用SNMP版本3的建议。

10. Acknowledgments
10. 致谢

This document was produced by the SNMPCONF Working Group. In particular, the editors wish to thank:

本文件由SNMPCONF工作组编制。编辑们尤其要感谢:

Christopher Anderson Andy Bierman Greg Bruell Dr Jeffrey Case Chris Elliott Joel Halpern Pablo Halpern Wes Hardaker David Harrington Harrie Hazewinkel Thippanna Hongal Bob Moore David T. Perkins Randy Presuhn Dan Romascanu Shawn Routhier Steve Waldbusser Bert Wijnen

克里斯托弗·安德森·安迪·比尔曼·格雷格·布鲁尔博士杰弗里·凯斯·克里斯·埃利奥特·乔尔·哈尔佩恩·帕布罗·哈特克·大卫·哈兹文克尔·蒂潘纳·洪格尔·鲍勃·摩尔·大卫·T·珀金斯·兰迪·普雷森和罗马斯坎努·肖恩·劳特希尔·史蒂夫·瓦尔德布瑟·伯特·维恩

11. Normative References
11. 规范性引用文件

[1] Harrington, D., Presuhn, R. and B. Wijnen, "An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks", STD 62, RFC 3411, December 2002.

[1] Harrington,D.,Presohn,R.和B.Wijnen,“描述简单网络管理协议(SNMP)管理框架的体系结构”,STD 62,RFC 3411,2002年12月。

[2] McCloghrie, K., Perkins, D. and J. Schoenwaelder, "Structure of Management Information Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.

[2] McCloghrie,K.,Perkins,D.和J.Schoenwaeld,“管理信息的结构版本2(SMIv2)”,STD 58,RFC 2578,1999年4月。

[3] McCloghrie, K., Perkins, D. and J. Schoenwaelder, "Textual Conventions for SMIv2", STD 58, RFC 2579, April 1999.

[3] McCloghrie,K.,Perkins,D.和J.Schoenwaeld,“SMIv2的文本约定”,STD 58,RFC 2579,1999年4月。

[4] McCloghrie, K., Perkins, D. and J. Schoenwaelder, "Conformance Statements for SMIv2", STD 58, RFC 2580, April 1999.

[4] McCloghrie,K.,Perkins,D.和J.Schoenwaeld,“SMIv2的一致性声明”,STD 58,RFC 25801999年4月。

[5] Presuhn, R. (Ed.), "Transport Mappings for the Simple Network Management Protocol (SNMPv2)", STD 62, RFC 3417, December 2002.

[5] Presohn,R.(编辑),“简单网络管理协议(SNMPv2)的传输映射”,STD 62,RFC 34172002年12月。

[6] Case, J., Harrington D., Presuhn R. and B. Wijnen, "Message Processing and Dispatching for the Simple Network Management Protocol (SNMP)", STD 62, RFC 3412, December 2002.

[6] Case,J.,Harrington D.,Presohn R.和B.Wijnen,“简单网络管理协议(SNMP)的消息处理和调度”,STD 62,RFC 3412,2002年12月。

[7] Blumenthal, U. and B. Wijnen, "User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3)", STD 62, RFC 3414, December 2002.

[7] Blumenthal,U.和B.Wijnen,“简单网络管理协议(SNMPv3)第3版的基于用户的安全模型(USM)”,STD 62,RFC 3414,2002年12月。

[8] Presuhn, R. (Ed.), "Version 2 of the Protocol Operations for the Simple Network Management Protocol (SNMP)", STD 62, RFC 3416, December 2002.

[8] Presohn,R.(编辑),“简单网络管理协议(SNMP)的协议操作第2版”,STD 62,RFC 3416,2002年12月。

[9] Levi, D., Meyer, P., and B. Stewart, "Simple Network Management Protocol Applications", STD 62, RFC 3413, December 2002.

[9] Levi,D.,Meyer,P.,和B.Stewart,“简单网络管理协议应用”,STD 62,RFC 3413,2002年12月。

[10] Wijnen, B., Presuhn, R. and K. McCloghrie, "View-based Access Control Model (VACM) for the Simple Network Management Protocol (SNMP)", STD 62, RFC 3415, December 2002.

[10] Wijnen,B.,Presohn,R.和K.McCloghrie,“用于简单网络管理协议(SNMP)的基于视图的访问控制模型(VACM)”,STD 62,RFC 3415,2002年12月。

[11] Presuhn, R. (Ed.), "Management Information Base for the Simple Network Management Protocol (SNMPv2)", STD 62, RFC 3418, December 2002.

[11] Presohn,R.(编辑),“简单网络管理协议的管理信息库(SNMPv2)”,STD 62,RFC 3418,2002年12月。

[12] Case, J., Mundy, R., Partain, D. and B. Stewart, "Introduction and Applicability Statements for Internet-Standard Management Framework", RFC 3410, December 2002.

[12] Case,J.,Mundy,R.,Partain,D.和B.Stewart,“互联网标准管理框架的介绍和适用性声明”,RFC 3410,2002年12月。

[13] Daniele, M., Haberman, B., Routhier, S. and J. Schoenwaelder, "Textual Conventions for Internet Network Addresses", RFC 3291, May 2002.

[13] Daniele,M.,Haberman,B.,Routhier,S.和J.Schoenwaeld,“因特网网络地址的文本约定”,RFC 3291,2002年5月。

[14] McCloghrie, K. (Ed.), "SNMPv2 Management Information Base for the Internet Protocol using SMIv2", RFC 2011, November 1996.

[14] McCloghrie,K.(编辑),“使用SMIv2的互联网协议SNMPv2管理信息库”,RFC 2011,1996年11月。

12. Informative References
12. 资料性引用

[15] Rose, M. and K. McCloghrie, "Structure and Identification of Management Information for TCP/IP-based Internets", STD 16, RFC 1155, May 1990.

[15] Rose,M.和K.McCloghrie,“基于TCP/IP的互联网管理信息的结构和识别”,STD 16,RFC 1155,1990年5月。

[16] Rose, M. and K. McCloghrie, "Concise MIB Definitions", STD 16, RFC 1212, March 1991.

[16] Rose,M.和K.McCloghrie,“简明MIB定义”,STD 16,RFC 1212,1991年3月。

[17] Rose, M., "A Convention for Defining Traps for use with the SNMP", RFC 1215, March 1991.

[17] Rose,M.“定义用于SNMP的陷阱的约定”,RFC1215,1991年3月。

[18] Case, J., Fedor, M., Schoffstall, M. and J. Davin, "Simple Network Management Protocol", STD 15, RFC 1157, May 1990.

[18] Case,J.,Fedor,M.,Schoffstall,M.和J.Davin,“简单网络管理协议”,STD 15,RFC 1157,1990年5月。

[19] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Introduction to Community-based SNMPv2", RFC 1901, January 1996.

[19] Case,J.,McCloghrie,K.,Rose,M.,和S.Waldbusser,“基于社区的SNMPv2简介”,RFC 19011996年1月。

[20] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB", RFC 2863, June 2000.

[20] McCloghrie,K.和F.Kastenholz,“接口组MIB”,RFC 28632000年6月。

[21] Brown, C. and F. Baker, "Management Information Base for Frame Relay DTEs Using SMIv2", RFC 2115, September 1997.

[21] Brown,C.和F.Baker,“使用SMIv2的帧中继DTE的管理信息库”,RFC 2115,1997年9月。

[22] Baker, F. (Ed.), "Requirements for IP Version 4 Routers", RFC 1812, June 1995.

[22] Baker,F.(编辑),“IP版本4路由器的要求”,RFC 1812,1995年6月。

[23] Hawkinson, J. and T. Bates, "Guidelines for Creation, Selection, and Registration of an Autonomous System (AS)", BCP 6, RFC 1930, March 1996.

[23] 霍金森,J.和T.贝茨,“自主系统(AS)的创建、选择和注册指南”,BCP 6,RFC 1930,1996年3月。

[24] Decker, E., Langille, P., Rijsinghani, A. and K. McCloghrie, "Definitions of Managed Objects for Bridges", RFC 1493, July 1993.

[24] Decker,E.,Langille,P.,Rijsinghani,A.和K.McCloghrie,“桥梁管理对象的定义”,RFC 1493,1993年7月。

[25] Levi, D. and J. Schoenwaelder "Definitions of Managed Objects for Scheduling Management Operations", RFC 3231, January 2002.

[25] Levi,D.和J.Schoenwaeld“调度管理操作的托管对象定义”,RFC 3231,2002年1月。

[26] Bell, E., Smith, A., Langille, P., Rijsinghani, A. and K. McCloghrie, "Definitions of Managed Objects for Bridges with Traffic Classes, Multicast Filtering and Virtual LAN Extensions", RFC 2674, August 1999.

[26] Bell,E.,Smith,A.,Langille,P.,Rijsinghani,A.和K.McCloghrie,“具有流量类、多播过滤和虚拟LAN扩展的网桥的托管对象定义”,RFC 2674,1999年8月。

[27] Baker, F., "IP Forwarding Table MIB", RFC 2096, January 1997.

[27] Baker,F.,“IP转发表MIB”,RFC 2096,1997年1月。

[28] St. Johns, M. (Ed.), "Radio Frequency (RF) Interface Management Information Base for MCNS/DOCSIS compliant RF interfaces", RFC 2670, August 1999.

[28] 圣约翰,M.(编辑),“MCNS/DOCSIS兼容射频接口的射频(RF)接口管理信息库”,RFC 26701999年8月。

[29] Baker, F. and R. Coltun, "OSPF Version 2 Management Information Base", RFC 1850, November 1995.

[29] Baker,F.和R.Coltun,“OSPF第2版管理信息库”,RFC1850,1995年11月。

[30] Blake, S., Black, D., Carlson M., Davies, E., Wang, Z. and W. Weiss, "An Architecture for Differentiated Services ", RFC 2475, December 1998.

[30] Blake,S.,Black,D.,Carlson M.,Davies,E.,Wang,Z.和W.Weiss,“差异化服务架构”,RFC 24751998年12月。

[31] Willis, S., Burruss, J. and J. Chu (Ed.), "Definitions of Managed Objects for the Fourth Version of the Border Gateway Protocol (BGP-4) using SMIv2", RFC 1657, July 1994.

[31] Willis,S.,Burruss,J.和J.Chu(编辑),“使用SMIv2的第四版边界网关协议(BGP-4)的托管对象定义”,RFC 1657,1994年7月。

[32] Waldbusser, S., "Remote Network Monitoring Management Information Base", RFC 2819, May 2000.

[32] Waldbusser,S.,“远程网络监测管理信息库”,RFC 2819,2000年5月。

[33] McCloghrie, K. and G. Hanson, "The Inverted Stack Table Extension to the Interfaces Group MIB", RFC 2864, June 2000.

[33] McCloghrie,K.和G.Hanson,“接口组MIB的反向堆栈表扩展”,RFC 2864,2000年6月。

[34] McCloghrie, K. and A. Bierman, "Entity MIB (Version 2)", RFC 2737, December 1999.

[34] McCloghrie,K.和A.Bierman,“实体MIB(版本2)”,RFC 27371999年12月。

[35] ITU-T,, Recommendation M.3010., PRINCIPLES FOR A TELECOMMUNICATIONS MANAGEMENT NETWORK. February, 2000.

[35] ITU-T,建议M.3010.,电信管理网络原则。2000年2月。

[36] Waldbusser, S., Saperia, J., and Hongal, T., "Policy Based Management MIB", Work-in-progress.

[36] Waldbusser,S.,Saperia,J.,和Hongal,T.,“基于策略的管理MIB”,正在进行中。

[37] Heintz, L., "SNMP Row Operations Extensions", Work-in-progress.

[37] Heintz,L.,“SNMP行操作扩展”,正在进行中。

[38] Zeltserman, D., "A Practical Guide to Snmpv3 and Network Management", Prentice Hall, 1999.

[38] Zeltserman,D.,“Snmpv3和网络管理实用指南”,Prentice Hall,1999年。

[39] Noto, M., Spiegel, E. and K. Tesink, "Definitions of Textual Conventions and OBJECT-IDENTITIES for ATM Management", RFC 2514, February 1999.

[39] Noto,M.,Spiegel,E.和K.Tesink,“ATM管理的文本约定和对象标识的定义”,RFC 2514,1999年2月。

[40] Kassaveri, R., Editor, "Distributed Management Expression MIB", RFC 2982, October 2000.

[40] Kassaveri,R.,编辑,“分布式管理表达式MIB”,RFC 29822000年10月。

[41] St. Johns, M., "DOCSIS Cable Device MIB Cable Device Management Information Base for DOCSIS compliant Cable Modems and Cable Modem Termination Systems", RFC 2669, August 1999.

[41] St.Johns,M.,“符合DOCSIS标准的电缆调制解调器和电缆调制解调器终端系统的DOCSIS电缆设备MIB电缆设备管理信息库”,RFC 2669,1999年8月。

[42] Westerinen, A., Schnizlein, J., Strassner, J., Scherling, M., Quinn, B., Herzog, S., Huynh, A., Carlson, M., Perry, J. and S. Waldbusser, "Terminology for Policy-Based Management", RFC 3198, November 2001.

[42] 威斯特林,A.,施尼兹林,J.,斯特拉斯纳,J.,舍林,M.,奎因,B.,赫尔佐格,S.,休恩,A.,卡尔森,M.,佩里,J.和S.瓦尔德布瑟,“基于政策的管理术语”,RFC 3198,2001年11月。

[43] http://wwww.cisco.com/univercd/cc/td/product/software/ios113ed/ 11ed_cr/secur_c/scprt/scacls.pdf.

[43] http://wwww.cisco.com/univercd/cc/td/product/software/ios113ed/ 11ed_cr/secur_c/scprt/scacls.pdf。

[44] Waldbusser, S., "Remote Network Monitoring Management Information Base Version 2 using SMIv2", RFC 2021, January 1997.

[44] Waldbusser,S.,“使用SMIv2的远程网络监控管理信息库版本2”,RFC 2021,1997年1月。

13. Intellectual Property
13. 知识产权

The IETF takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on the IETF's procedures with respect to rights in standards-track and standards-related documentation can be found in BCP-11. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to

IETF对可能声称与本文件所述技术的实施或使用有关的任何知识产权或其他权利的有效性或范围,或此类权利下的任何许可可能或可能不可用的程度,不采取任何立场;它也不表示它已作出任何努力来确定任何此类权利。有关IETF在标准跟踪和标准相关文件中权利的程序信息,请参见BCP-11。可供发布的权利主张副本和任何许可证保证副本,或试图

obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification can be obtained from the IETF Secretariat.

可从IETF秘书处获得本规范实施者或用户使用此类专有权利的一般许可或许可。

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to practice this standard. Please address the information to the IETF Executive Director.

IETF邀请任何相关方提请其注意任何版权、专利或专利申请,或其他可能涉及实施本标准所需技术的专有权利。请将信息发送给IETF执行董事。

14. Editors' Addresses
14. 编辑地址

Michael R. MacFaden Riverstone Networks, Inc 5200 Great America Parkway Santa Clara, CA 95054

加利福尼亚州圣克拉拉大美洲公园路5200号Michael R.MacFaden Riverstone Networks,Inc.95054

   EMail: mrm@riverstonenet.com
        
   EMail: mrm@riverstonenet.com
        

David Partain Ericsson AB P.O. Box 1248 SE-581 12 Linkoping Sweden

David Partain Ericsson AB邮政信箱1248 SE-581 12 Linkoping瑞典

   EMail: David.Partain@ericsson.com
        
   EMail: David.Partain@ericsson.com
        

Jon Saperia JDS Consulting 174 Chapman Street Watertown, MA 02472

马萨诸塞州沃特敦查普曼街174号Jon Saperia JDS咨询公司02472

   EMail: saperia@jdscons.com
        
   EMail: saperia@jdscons.com
        

Wayne F. Tackabury Gold Wire Technology 411 Waverley Oaks Rd. Waltham, MA 02452

Wayne F.Tackabury金丝技术公司马萨诸塞州沃尔瑟姆威弗利橡树路411号,邮编02452

   EMail: wayne@goldwiretech.com
        
   EMail: wayne@goldwiretech.com
        
15. Full Copyright Statement
15. 完整版权声明

Copyright (C) The Internet Society (2003). All Rights Reserved.

版权所有(C)互联网协会(2003年)。版权所有。

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

本文件及其译本可复制并提供给他人,对其进行评论或解释或协助其实施的衍生作品可全部或部分编制、复制、出版和分发,不受任何限制,前提是上述版权声明和本段包含在所有此类副本和衍生作品中。但是,不得以任何方式修改本文件本身,例如删除版权通知或对互联网协会或其他互联网组织的引用,除非出于制定互联网标准的需要,在这种情况下,必须遵循互联网标准过程中定义的版权程序,或根据需要将其翻译成英语以外的其他语言。

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

上述授予的有限许可是永久性的,互联网协会或其继承人或受让人不会撤销。

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

本文件和其中包含的信息是按“原样”提供的,互联网协会和互联网工程任务组否认所有明示或暗示的保证,包括但不限于任何保证,即使用本文中的信息不会侵犯任何权利,或对适销性或特定用途适用性的任何默示保证。

Acknowledgement

确认

Funding for the RFC Editor function is currently provided by the Internet Society.

RFC编辑功能的资金目前由互联网协会提供。