2.6 模块定义

模块,顾名思义就是具有某种“功能”的独立结构。ASN.1作为一种标记语言,主要的功能就是对信息的描述。所以应该从这个角度来理解模块。模块实际就是一组类型和值的定义,是描述某种信息的一组定义的集合,其没有规模大小的限制。在SNMP里,SMI和MIB都是ASN.1的模块。这当然也包括企业或个人开发的私有MIB。模块的定义方法很简单:DEFINITIONS作为模块定义的关键字,由BEGIN开始,END结束。所使用的符号都在表2-2里,其定义的形式如下:

<modulereference> DEFINITIONS ::=
 BEGIN
   --模块头部
   EXPORTS  -- 可选,导出本模块的数据类型或值,类比与C语言中的导出的(接口)符号
   IMPORTS  -- 可选,导入其他模块的数据类型或值,类比于C语言中的#include
   --模块主体
   AssignmentList - 模块内容定义
 END

其中EXPORTS和IMPORTS子句的形式类似,多个类型或值间用逗号隔开最后以分号结束,IMPORTS子句中还带有FROM,其后接模块名,表示从哪个模块导入数据类型或值。

IMPORT < 类型或值1,类型或值2...> FROM < 模块名 1>
       < 类型或值1,类型或值2...> FROM < 模块名 2> ...;
EXPORTS < 类型或值1,类型或值2...>; 

注意

模块中的类型可以先使用后定义。IMPORT和EXPORTS最后一定要以分号结束。