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