8. Example MIB Module With Template-based Data
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. 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. 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: Index objects that identify what floor and office we are managing: bldgHVACFloor bldgHVACOffice A single index reference to a table that 'glues' configuration information defaults with descriptive information: bldgHVACCfgTemplate A set of objects that show status and units of work (bldgHVACCoolOrHeatMins) and standard per-row SnmpAdminString, StorageType, and RowStatus columnar objects: bldgHVACFanSpeed bldgHVACCurrentTemp bldgHVACCoolOrHeatMins bldgHVACDiscontinuityTime 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
chill". Standard owner and status objects may also be helpful and are included here. The row columnar objects are: 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. 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. 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: A simple index to the table: bldgHVACCfgTemplateIndex The configuration objects:
bldgHVACCfgTemplateDesiredTemp bldgHVACCfgTemplateCoolOrHeat Administrative objects for SnmpAdminString and RowStatus: bldgHVACCfgTemplateInfo bldgHVACCfgTemplateOwner bldgHVACCfgTemplateStorage bldgHVACCfgTemplateStatus8.1. MIB Module Definition
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 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
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 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. 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." 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 } -- -- 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
-- 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 ::= 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 } 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. 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
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 } 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 }
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 } 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. 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 -- 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." ::= { 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 ::= SEQUENCE { bldgHVACCfgTemplateInfoIndex Unsigned32, bldgHVACCfgTemplateInfoID SnmpAdminString,
bldgHVACCfgTemplateInfoDescr SnmpAdminString, bldgHVACCfgTemplateInfoOwner SnmpAdminString, bldgHVACCfgTemplateInfoStatus RowStatus, bldgHVACCfgTemplateInfoStorType StorageType } 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 } 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 } bldgHVACCfgTemplateInfoStatus OBJECT-TYPE
SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "The activation status of this row. 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 } -- -- 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. 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 } 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
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 } 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 } 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."
::= { bldgHVACCfgTemplateEntry 6 } bldgHVACCfgTemplateStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "The activation status of this row of the table. 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 } -- 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 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,
bldgHVACCfgTemplateInfoStatus, bldgHVACCfgTemplateInfoStorType, bldgHVACCfgTemplateDesiredTemp, bldgHVACCfgTemplateCoolOrHeat, bldgHVACCfgTemplateInfo, bldgHVACCfgTemplateOwner,bldgHVACCfgTemplateStorage, bldgHVACCfgTemplateStatus } STATUS current DESCRIPTION "The bldgHVACObjects Group." ::= { bldgGroups 1 } END8.2. Notes on MIB Module with Template-based Data
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. 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.
8.3. Examples of Usage of the 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. If offices 24, 25, and 26 on the third floor are executive offices, the values in the bldgHVACTable might be: 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.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: 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) 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. 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: 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: 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).
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. 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: 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.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: 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) 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.9. Security Considerations
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. 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.
10. Acknowledgments
This document was produced by the SNMPCONF Working Group. In particular, the editors wish to thank: 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 Wijnen11. Normative References
[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. [2] McCloghrie, K., Perkins, D. and J. Schoenwaelder, "Structure of Management Information Version 2 (SMIv2)", STD 58, RFC 2578, April 1999. [3] McCloghrie, K., Perkins, D. and J. Schoenwaelder, "Textual Conventions for SMIv2", STD 58, RFC 2579, April 1999. [4] McCloghrie, K., Perkins, D. and J. Schoenwaelder, "Conformance Statements for SMIv2", STD 58, RFC 2580, April 1999. [5] Presuhn, R. (Ed.), "Transport Mappings for the Simple Network Management Protocol (SNMPv2)", STD 62, RFC 3417, December 2002. [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.
[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. [8] Presuhn, R. (Ed.), "Version 2 of the Protocol Operations for the Simple Network Management Protocol (SNMP)", STD 62, RFC 3416, December 2002. [9] Levi, D., Meyer, P., and B. Stewart, "Simple Network Management Protocol Applications", STD 62, RFC 3413, December 2002. [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. [11] Presuhn, R. (Ed.), "Management Information Base for the Simple Network Management Protocol (SNMPv2)", STD 62, RFC 3418, December 2002. [12] Case, J., Mundy, R., Partain, D. and B. Stewart, "Introduction and Applicability Statements for Internet-Standard Management Framework", RFC 3410, December 2002. [13] Daniele, M., Haberman, B., Routhier, S. and J. Schoenwaelder, "Textual Conventions for Internet Network Addresses", RFC 3291, May 2002. [14] McCloghrie, K. (Ed.), "SNMPv2 Management Information Base for the Internet Protocol using SMIv2", RFC 2011, November 1996.12. Informative References
[15] Rose, M. and K. McCloghrie, "Structure and Identification of Management Information for TCP/IP-based Internets", STD 16, RFC 1155, May 1990. [16] Rose, M. and K. McCloghrie, "Concise MIB Definitions", STD 16, RFC 1212, March 1991. [17] Rose, M., "A Convention for Defining Traps for use with the SNMP", RFC 1215, March 1991. [18] Case, J., Fedor, M., Schoffstall, M. and J. Davin, "Simple Network Management Protocol", STD 15, RFC 1157, May 1990. [19] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Introduction to Community-based SNMPv2", RFC 1901, January 1996.
[20] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB", RFC 2863, June 2000. [21] Brown, C. and F. Baker, "Management Information Base for Frame Relay DTEs Using SMIv2", RFC 2115, September 1997. [22] Baker, F. (Ed.), "Requirements for IP Version 4 Routers", RFC 1812, June 1995. [23] Hawkinson, J. and T. Bates, "Guidelines for Creation, Selection, and Registration of an Autonomous System (AS)", BCP 6, RFC 1930, March 1996. [24] Decker, E., Langille, P., Rijsinghani, A. and K. McCloghrie, "Definitions of Managed Objects for Bridges", RFC 1493, July 1993. [25] Levi, D. and J. Schoenwaelder "Definitions of Managed Objects for Scheduling Management Operations", RFC 3231, January 2002. [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. [27] Baker, F., "IP Forwarding Table MIB", RFC 2096, January 1997. [28] St. Johns, M. (Ed.), "Radio Frequency (RF) Interface Management Information Base for MCNS/DOCSIS compliant RF interfaces", RFC 2670, August 1999. [29] Baker, F. and R. Coltun, "OSPF Version 2 Management Information Base", RFC 1850, November 1995. [30] Blake, S., Black, D., Carlson M., Davies, E., Wang, Z. and W. Weiss, "An Architecture for Differentiated Services ", RFC 2475, December 1998. [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. [32] Waldbusser, S., "Remote Network Monitoring Management Information Base", RFC 2819, May 2000. [33] McCloghrie, K. and G. Hanson, "The Inverted Stack Table Extension to the Interfaces Group MIB", RFC 2864, June 2000.
[34] McCloghrie, K. and A. Bierman, "Entity MIB (Version 2)", RFC 2737, December 1999. [35] ITU-T,, Recommendation M.3010., PRINCIPLES FOR A TELECOMMUNICATIONS MANAGEMENT NETWORK. February, 2000. [36] Waldbusser, S., Saperia, J., and Hongal, T., "Policy Based Management MIB", Work-in-progress. [37] Heintz, L., "SNMP Row Operations Extensions", Work-in-progress. [38] Zeltserman, D., "A Practical Guide to Snmpv3 and Network Management", 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. [40] Kassaveri, R., Editor, "Distributed Management Expression MIB", RFC 2982, October 2000. [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. [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. [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.13. Intellectual Property
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
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. 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.14. Editors' Addresses
Michael R. MacFaden Riverstone Networks, Inc 5200 Great America Parkway Santa Clara, CA 95054 EMail: mrm@riverstonenet.com David Partain Ericsson AB P.O. Box 1248 SE-581 12 Linkoping Sweden EMail: David.Partain@ericsson.com Jon Saperia JDS Consulting 174 Chapman Street Watertown, MA 02472 EMail: saperia@jdscons.com Wayne F. Tackabury Gold Wire Technology 411 Waverley Oaks Rd. Waltham, MA 02452 EMail: wayne@goldwiretech.com
15. Full Copyright Statement
Copyright (C) The Internet Society (2003). All Rights Reserved. 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.