SYNTAX 子句

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

注意

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

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

  • SYNTAX 子句的文本表示形式映射到 CIM 属性限定符 textual_convention
  • SYNTAX 子句中的命名类型定义映射到 CIM 属性限定符 object_syntax。 此映射因数据类型而异。 有关详细信息,请参阅映射说明。
  • 编码 SNMPv1 和 SNMPv2C 协议帧时使用的 SNMP 类型映射到 CIM 属性限定符 编码
  • 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编码object_syntax 限定符始终与 MIB 类型相同,默认值始终 NULL

MIB 类型 CIM 变体类型 cimtype 值
整数 VT_I4 sint32
OCTETSTRING VT_BSTR 字符串
OBJECTIDENTIFIER VT_BSTR 字符串
VT_NULL 不支持
IpAddress VT_BSTR 字符串
计数器 VT_I4 uint32
轨距 VT_I4 uint32
TimeTicks VT_I4 uint32
不透明 VT_BSTR 字符串
NetworkAddress VT_BSTR 字符串

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

MIB 类型 CIM 变体类型 cimtype 值
整数 VT_I4 sint32
OCTET 字符串 VT_BSTR 字符串
对象标识符 VT_BSTR 字符串
IpAddress VT_BSTR 字符串
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 字符串

命名类型

SNMP 命名类型映射到 CIM 定义的类型。 当 SYNTAX 子句引用 基元类型文本约定或通过类型赋值派生 约束类型时,请使用这些类型来确定哪些映射过程适用。

  • 如果通过类型分配规则的派生,则会遇到受约束的类型定义:

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

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

注意

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

约束类型

约束类型是基元类型、命名类型或文本约定,受 SMI 文档 RFC 1213 和 RFC 1903 中定义的一些子类型约束。 发生子类型化时,需要其他 CIM 限定符来指定子类型值。 SYNTAX 子句中的命名类型定义将逐字映射到 CIM 属性限定符 object_syntax,但不包括子类型的约束。

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

  • 枚举整数

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

受约束的 MIB 类型 CIM 变体类型 CIM 限定符
枚举整数 VT_BSTR textual_convention:enumeratedinteger
编码:INTEGER
cimtype: string
  • CIM 属性限定符 指定枚举值。 此限定符表示为包含带符号 32 位整数值的逗号分隔列表的字符串。 下表列出了映射类型。 默认值始终 NULL

受约束的 MIB 类型 CIM 变体类型 CIM 限定符
VT_ARRAY |VT_BSTR textual_convention:位
编码:OCTETSTRING
cimtype: string
  • 可变长度

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

    (((0.9) .. (0.9)) | (0.9))(, (((0.9) .. (0.9)) | (0.9)))*
    
  • 固定长度

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

  • 范围

    当 SYNTAX 子句引用基元类型、命名类型或文本约定,该约定被子类型化为 ranged 或 fixed-value 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")