AGENT
扩展UCD-SNMP代理
该文档描述了编写代码扩展UCD-SNMP V4代理的过程。通过本方法写的模块也适用于NET-SNMP v5的代理,尽管这些模块不能利用全新的基于句柄的辅助机制(handler-based helper mechanism)。查看在线文档来了解该机制的更多信息和示例。
我们很期待你对本文的注释和反馈,不论是你觉得有用或者相反。我们更期待你对它如何改进的建议。
以下是建议的阅读顺序:
1、概览和介绍
2、MIB文件,以及它与代理实现的关系
3、头文件
4、模块实现代码的基本结构
5、不基于表(non-table based)实现的细节
6、简单基于表实现的细节
7、更一般的基于表实现的细节
8、怎样实现可设置的变量(SET-able variables)
本文在内容上是大致完备的,但有时仍需要参考UCD发行版中的代码(特别是示例模块),你最好手头有这些文件备用。
1、编写MIB模块
介绍
UCD-SNMP代理设计为可按需添加新模块,从而增加其功能实现定制。早期CMU代码的发展之一就是可调用外部脚本,这可能是扩展代理的最简单方法。
但是,这个方法在许多情形下是不合适的,如考虑到速度、访问权限、可靠性和方法的简洁时。在这些情形下,显然的解决方法是将需要的功能用C代码实现后直接与代理一起编译来实现。近期许多在代码结构(?code structure)方面的进展使这一过程变得容易。特别的,近期新加入的工具有了mib2c。它被设计用来生成实现部分MIB树(用MIB文件描述)的C代码框架。本文档包含mib2c工具的使用方法,也详尽的描述了这些代码的需要和功能(as well as describing the requirements and functionality of the code
in more detail)。
为了实现一个新的MIB模块,需要三个文件,随后会依次涉及到。注意,考虑到具体任务的具体情况,本文不可能涉及到各种精确的细节。本文只是描述必需的代码框架,让代理的实现人员从代理内部实现的细枝末节中解放出来,而更多关注于手中具体的任务。
依照本文查看已存在模块的实现和示例可能有一些帮助,本文也会在适当时参考一些例子。但是,应当记住UCD代理支持许多不同种类的操作系统,包括实现和接口都有很大差异的系统。这反映为代码的复杂性。另外,代理逐年发展,结果也常常有一些副本和冗余的度量。(这句意思不是很清楚:Also, the agent has developed gradually over
the years, and there is often some measure of duplication or redundancy as a result.)
正如FAQ中,UCD-SNMP开发者的官方口号是“现有的实现总不让人明白,需要改进“。
本文档描述了一个理想的,直白的情形-真实的情形复杂的多-使例子模块更易读。
关于术语的说明-“模块”一词在文中多次涉及。根据上下文,有多种意义:
1、支持新的MIB。如:所需的功能的总和。这通常称为一个MIB模块
2、上述功能的一个完整的子集,作为一个单体实现。称为一个实现模块或模块
3、上述子集的组合。称为模块组
可见意义1与3同义-他们的区别在于,MIB模块意义侧重于从代理外部看,将模块视为一个无缝的整体并隐藏了内部的实现。而模块组侧重于考虑内部的实现细节,并强调对外提供的功能是由组内部的模块合作提供的。
言归正传,上面提到的三个文件是
• 一个MIB定义文件
• 一个C头文件
• 一个C实现文件
下一节介绍MIB定义文件,和它对代理实现的影响。
明天继续看第二部分。。。
阅读(1678) | 评论(0) | 转发(0) |