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")