SNMPv2-CONF DEFINITIONS ::= BEGIN
 
IMPORTS ObjectName, NotificationName, ObjectSyntax
                                               FROM SNMPv2-SMI;
 
-- definitions for conformance groups
 
OBJECT-GROUP MACRO ::=
BEGIN
    TYPE NOTATION ::=
                  ObjectsPart
                  "STATUS" Status
                  "DESCRIPTION" Text
                  ReferPart
 
    VALUE NOTATION ::=
                  value(VALUE OBJECT IDENTIFIER)
 
    ObjectsPart ::=
                  "OBJECTS" "{" Objects "}"
    Objects ::=
                  Object
                | Objects "," Object
    Object ::=
                  value(ObjectName)
 
    Status ::=
                  "current"
                | "deprecated"
                | "obsolete"
 
    ReferPart ::=
                  "REFERENCE" Text
                | empty
 
    -- a character string as defined in [2]
    Text ::= value(IA5String)
END
 
-- more definitions for conformance groups
 
NOTIFICATION-GROUP MACRO ::=
BEGIN
    TYPE NOTATION ::=
                  NotificationsPart
                  "STATUS" Status
                  "DESCRIPTION" Text
                  ReferPart
 
    VALUE NOTATION ::=
                  value(VALUE OBJECT IDENTIFIER)
 
    NotificationsPart ::=
                  "NOTIFICATIONS" "{" Notifications "}"
    Notifications ::=
                  Notification
                | Notifications "," Notification
    Notification ::=
                  value(NotificationName)
 
    Status ::=
                  "current"
                | "deprecated"
                | "obsolete"
 
    ReferPart ::=
                  "REFERENCE" Text
                | empty
 
    -- a character string as defined in [2]
    Text ::= value(IA5String)
END
 
-- definitions for compliance statements
 
MODULE-COMPLIANCE MACRO ::=
BEGIN
    TYPE NOTATION ::=
                  "STATUS" Status
                  "DESCRIPTION" Text
                  ReferPart
                  ModulePart
 
    VALUE NOTATION ::=
                  value(VALUE OBJECT IDENTIFIER)
 
    Status ::=
                  "current"
                | "deprecated"
                | "obsolete"
 
    ReferPart ::=
                  "REFERENCE" Text
                | empty
 
    ModulePart ::=
                  Modules
    Modules ::=
                  Module
                | Modules Module
    Module ::=
                  -- name of module --
                  "MODULE" ModuleName
                  MandatoryPart
                  CompliancePart
 
    ModuleName ::=
                  -- identifier must start with uppercase letter
                  identifier ModuleIdentifier
                  -- must not be empty unless contained
                  -- in MIB Module
                | empty
    ModuleIdentifier ::=
                  value(OBJECT IDENTIFIER)
                | empty
 
    MandatoryPart ::=
                  "MANDATORY-GROUPS" "{" Groups "}"
                | empty
 
    Groups ::=
                  Group
                | Groups "," Group
    Group ::=
                  value(OBJECT IDENTIFIER)
 
    CompliancePart ::=
                  Compliances
                | empty
 
    Compliances ::=
                  Compliance
                | Compliances Compliance
    Compliance ::=
                  ComplianceGroup
                | Object
 
    ComplianceGroup ::=
                  "GROUP" value(OBJECT IDENTIFIER)
                  "DESCRIPTION" Text
 
    Object ::=
                  "OBJECT" value(ObjectName)
                  SyntaxPart
                  WriteSyntaxPart
                  AccessPart
                  "DESCRIPTION" Text
 
    -- must be a refinement for object's SYNTAX clause
    SyntaxPart ::= "SYNTAX" Syntax
                | empty
 
    -- must be a refinement for object's SYNTAX clause
    WriteSyntaxPart ::= "WRITE-SYNTAX" Syntax
                | empty
 
    Syntax ::=    -- Must be one of the following:
                       -- a base type (or its refinement),
                       -- a textual convention (or its refinement), or
                       -- a BITS pseudo-type
                  type
                | "BITS" "{" NamedBits "}"
 
    NamedBits ::= NamedBit
                | NamedBits "," NamedBit
 
    NamedBit ::= identifier "(" number ")" -- number is nonnegative
 
    AccessPart ::=
                  "MIN-ACCESS" Access
                | empty
    Access ::=
                  "not-accessible"
                | "accessible-for-notify"
                | "read-only"
                | "read-write"
                | "read-create"
 
    -- a character string as defined in [2]
    Text ::= value(IA5String)
END
 
-- definitions for capabilities statements
 
AGENT-CAPABILITIES MACRO ::=
BEGIN
    TYPE NOTATION ::=
                  "PRODUCT-RELEASE" Text
                  "STATUS" Status
                  "DESCRIPTION" Text
                  ReferPart
                  ModulePart
 
    VALUE NOTATION ::=
                  value(VALUE OBJECT IDENTIFIER)
 
    Status ::=
                  "current"
                | "obsolete"
 
    ReferPart ::=
                  "REFERENCE" Text
                | empty
 
    ModulePart ::=
                  Modules
                | empty
    Modules ::=
                  Module
                | Modules Module
    Module ::=
                  -- name of module --
                  "SUPPORTS" ModuleName
                  "INCLUDES" "{" Groups "}"
                  VariationPart
 
    ModuleName ::=
                  -- identifier must start with uppercase letter
                  identifier ModuleIdentifier
    ModuleIdentifier ::=
                  value(OBJECT IDENTIFIER)
                | empty
 
    Groups ::=
                  Group
                | Groups "," Group
    Group ::=
                  value(OBJECT IDENTIFIER)
 
    VariationPart ::=
                  Variations
                | empty
    Variations ::=
                  Variation
                | Variations Variation
 
    Variation ::=
                  ObjectVariation
                | NotificationVariation
 
    NotificationVariation ::=
                  "VARIATION" value(NotificationName)
                  AccessPart
                  "DESCRIPTION" Text
 
    ObjectVariation ::=
                  "VARIATION" value(ObjectName)
                  SyntaxPart
                  WriteSyntaxPart
                  AccessPart
                  CreationPart
                  DefValPart
                  "DESCRIPTION" Text
 
    -- must be a refinement for object's SYNTAX clause
    SyntaxPart ::= "SYNTAX" Syntax
                | empty
 
    WriteSyntaxPart ::= "WRITE-SYNTAX" Syntax
                | empty
 
    Syntax ::=    -- Must be one of the following:
                       -- a base type (or its refinement),
                       -- a textual convention (or its refinement), or
                       -- a BITS pseudo-type
                  type
                | "BITS" "{" NamedBits "}"
 
    NamedBits ::= NamedBit
                | NamedBits "," NamedBit
 
    NamedBit ::= identifier "(" number ")" -- number is nonnegative
 
    AccessPart ::=
                  "ACCESS" Access
                | empty
 
    Access ::=
                  "not-implemented"
                -- only "not-implemented" for notifications
                | "accessible-for-notify"
                | "read-only"
                | "read-write"
                | "read-create"
                -- following is for backward-compatibility only
                | "write-only"
 
    CreationPart ::=
                  "CREATION-REQUIRES" "{" Cells "}"
                | empty
    Cells ::=
                  Cell
                | Cells "," Cell
    Cell ::=
                  value(ObjectName)
 
    DefValPart ::= "DEFVAL" "{" Defvalue "}"
                | empty
 
    Defvalue ::=  -- must be valid for the object's syntax
                  -- in this macro's SYNTAX clause, if present,
                  -- or if not, in object's OBJECT-TYPE macro
                  value(ObjectSyntax)
                | "{" BitsValue "}"
 
    BitsValue ::= BitNames
                | empty
 
    BitNames ::=  BitName
                | BitNames "," BitName
 
    BitName ::= identifier
 
    -- a character string as defined in [2]
    Text ::= value(IA5String)
END
 
END