SYNTAX 子句

OBJECT-TYPE 宏包含一个用于定义 MIB 对象的数据和类型的 SYNTAX 子句。 虽然 SNMP 提供程序遵守有关映射 SYNTAX 子句的一般规则,但提供程序还会遵循特定于多种数据类型的规则。

注意

有关安装提供程序的详细信息,请参阅设置 WMI SNMP 环境

以下映射规则适用于下表中所述的所有数据类型:

  • SYNTAX 子句的文本表示形式映射到 CIM 属性限定符 textual_convention。
  • SYNTAX 子句中的命名类型定义映射到 CIM 属性限定符 object_syntax。 此映射因数据类型而异。 有关详细信息,请参阅映射说明。
  • 编码 SNMPv1 和 SNMPv2C 协议帧时使用的 SNMP 类型映射到 CIM 属性限定符 encoding。
  • CIM 属性限定符 cimtype 包含用于设置基础 CIM 协议值格式的文本表示形式。

下表中列出的数据类型具有控制提供程序映射行为的特定规则。

SNMP 数据类型 说明
基元类型 管理信息结构 (SMI) 文档 RFC 1213 和 RFC 1903 中定义的基本数据类型之一。
文本约定 通过显式使用 SNMPv2C TEXTUAL-CONVENTION 宏生成的或通过使用命名类型生成的类型定义。 文本约定将名称(在某些情况下为值的范围)分配到现有数据类型。
命名类型 对基元类型、文本约定或受约束类型的命名引用。
受约束类型 受 SMI 文档 RFC 1213 和 RFC 1903 中定义的某些子类型化机制约束的基元类型、命名类型或文本约定。

基元类型

基元类型是管理信息结构 (SMI) 文档 RFC 1213 和 RFC 1903 中定义的基本数据类型之一。 SNMP 基元类型映射到 CIM 定义的类型。 下表列出了当 SYNTAX 子句显式引用 SNMPv1 的基元类型时发生的映射。 textual_convention、encoding 和 object_syntax 限定符始终与 MIB 类型相同,默认值始终为 NULL。

MIB 类型 CIM 变体类型 cimtype 值
INTEGER VT_I4 sint32
OCTETSTRING VT_BSTR string
OBJECTIDENTIFIER VT_BSTR string
Null VT_NULL 不支持
IpAddress VT_BSTR string
计数器 VT_I4 uint32
仪表 VT_I4 uint32
TimeTicks VT_I4 uint32
不透明 VT_BSTR string
NetworkAddress VT_BSTR string

当 SYNTAX 子句显式或通过命名类型分配引用 NULL 时,提供程序将忽略 OBJECT-TYPE 宏。 下表列出了当 SYNTAX 子句显式引用 SNMPv2 的基元类型时发生的映射。 textual_convention、encoding 和 object_syntax 限定符始终与 MIB 类型相同,默认值始终为 NULL。

MIB 类型 CIM 变体类型 cimtype 值
INTEGER VT_I4 sint32
OCTET STRING VT_BSTR string
OBJECT IDENTIFIER VT_BSTR string
IpAddress VT_BSTR string
Counter32 VT_I4 uint32
Gauge32 VT_I4 uint32
Unsigned32 VT_I4 uint32
Integer32 VT_I4 sint32
Counter64 VT_BSTR uint64
TimeTicks VT_I4 uint32
不透明 VT_BSTR string

命名类型

SNMP 命名类型映射到 CIM 定义的类型。 当 SYNTAX 子句通过类型分配派生引用基元类型文本约定受约束类型时,将使用这些类型来确定应用哪些映射过程。

  • 如果通过类型分配规则的派生进行引用时遇到受约束类型定义:

    • 如果通过进一步派生进行引用时遇到 TEXTUAL-CONVENTION 宏中列出的文本约定之一,请应用受约束类型和文本约定的映射规则。
    • 否则,如果遇到任一基元类型表中列出的基元类型之一,请应用基元类型和受约束类型的映射规则。
  • 如果遇到 TEXTUAL_CONVENTION 宏中列出的文本约定之一,请应用文本约定的映射规则。

  • 如果遇到任一基元类型表中列出的基元类型之一,请应用基元类型的映射规则。

注意

包含不符合上述映射的属性类型的类是无效的。 在这种情况下,如果提供程序在执行实例检索函数时请求检索类定义,则提供程序将返回错误。

受约束类型

受约束类型是受 SMI 文档 RFC 1213 和 RFC 1903 中定义的某些子类型化机制约束的基元类型、命名类型或文本约定。 发生子类型化时,需要提供额外的 CIM 限定符来指定子类型值。 SYNTAX 子句中的命名类型定义逐字映射到 CIM 属性限定符 object_syntax,最高映射级别为子类型的约束(不含)。

子类型可以遵循以下任何格式:

  • 枚举的 INTEGER

    CIM 属性限定符 enumeration 指定枚举的值。 此限定符表示为一个字符串,其中包含带符号 32 位整数值的逗号分隔列表。 下表列出了映射类型。 默认值始终为 NULL。

受约束 MIB 类型 CIM 变体类型 CIM 限定符
枚举的 INTEGER VT_BSTR textual_convention:enumeratedinteger
encoding:INTEGER
cimtype:字符串
  • BITS

    CIM 属性限定符 bits 指定枚举的值。 此限定符表示为一个字符串,其中包含带符号 32 位整数值的逗号分隔列表。 下表列出了映射类型。 默认值始终为 NULL。

受约束 MIB 类型 CIM 变体类型 CIM 限定符
BITS VT_ARRAY | VT_BSTR textual_convention:bits
encoding:OCTETSTRING
cimtype:字符串
  • Variable-length

    当 SYNTAX 子句引用基元类型、命名类型或子类型化为可变长度 OCTET STRING 或 Opaque 的文本约定时,CIM 属性限定符 variable_length 指定与类型定义关联的最小、最大和固定长度值。 此限定符实现为以下格式的字符串,其中的可变长度值表示为无符号 32 位整数。

    (((0.9) .. (0.9)) | (0.9))(, (((0.9) .. (0.9)) | (0.9)))*
    
  • Fixed-length

    当 SYNTAX 子句引用基元类型、命名类型或子类型化为固定长度 OCTET STRING 或 Opaque 的文本约定时,CIM 属性限定符 fixed_length 指定固定长度值。 此限定符表示为无符号 32 位整数值。

  • 范围

    当 SYNTAX 子句引用基元类型、命名类型或子类型化为有范围或固定值 INTEGER 或 Gauge 的文本约定时,CIM 属性限定符 variable_value 指定与类型定义关联的有范围和固定值。 此限定符实现为以下格式的字符串,其中的范围和固定长度值表示为无符号 32 位整数。

    (((0.9)..(0.9))|(0.9))(,(((0.9)..(0.9))|(0.9)))*
    

示例代码

以下示例描述了一个枚举的 INTEGER 子类型。

Status := INTEGER {
up(1),
down(2),
testing(3)
}

此示例映射到:

enumeration("up(1),down(2),testing(3)")

以下代码示例描述了一个 BITS 子类型。

Status := BITS {
up(1),
down(2), 
testing(3)
}

以下代码示例映射到:

bits("up(1),down(2),testing(3)")

以下代码示例描述了一个可变长度子类型。

MySnmpOSIAddress ::=  TEXTUAL-CONVENTION

    DISPLAY-HINT    "*1x:/1x:"
    STATUS        current
    DESCRIPTION
            "Represents an OSI transport-address:

            octets    contents         encoding
              1        length of NSAP   'n' as an unsigned-integer
                                        (either 0 or from 3 to 20)
              2..(n+1)  NSAP          concrete binary representation
              (n+2)..m  TSEL             string of (up to 64) octets
            "
    SYNTAX         OCTET STRING (SIZE (1|4..85))

此示例映射到:

display_hint("*1x:/1x:"),
encoding("OCTETSTRING"),
textual_convention("OCTETSTRING"),
variable_length ("1,4..85")

以下示例描述了一个固定长度子类型。

IPXADDRESS := OCTET STRING (SIZE (6))

此示例映射到:

fixed_length(6)

以下示例描述了一个范围子类型。

Status := INTEGER (10..20|8)

此示例映射到:

variable_value("10..20,8")