http://wenku.baidu.com/view/6a7903a9d1f34693daef3e9f.html

一、  SNMP AGENT在SNMP框架中的位置

1.1 SNMP是被广泛接受并投入使用的工业标准,它采用轮询机制,便于网络管 理员检索任何节点的信息,进行修改,寻找故障;完成故障诊断,容量规划和报告生成。

SNMP的结构分为NMS和AGENT两部分(如图1.1.1),NMS(Network Management Station,目前常用的网管平台有SunNetManager和IBM NetView)向Agent发请求,Agent是驻留在被管设备上的一个进程或任务,接受到NMS的请求报文后,进行解码,分析,然后从相关模块中得到管理变量的值,生成Response报文,编码返送回NMS。SNMP就是用来规定NMS和Agent之间是如何传递管理信息的应用层协议。

1.2 SNMP协议现在有3个版本。

SNMPv1有5个基本原语

l         get-request

l         set-request

l         get-next-request

l         get-reponse

l         trap

SNMPv2增加了两个原语

l         get-bulk- request

l         inform-request

SNMPv3主要是在安全上进行了加强。

1.3 为了简化Agent(网管代理一般分为两个功能模块和一个公用模块MIB库)一侧的开发,SNMP规定只有两种操作Get, Set,前者用于从 被管设备获取管理信息。后者通过设置变量值来起到配置被管设备的作用。开放端口 UDP Port162 UDP Port161 AGENT Response Trap

NMS和Agent之间通过发送报文来传递管理信息,SNMPv1规定只有五种报 文:  Get Request报文:用于获取指定管理变量的值。

GetNext Request报文:用于连续获取一组管理变量的值。

GetResponse报文:用于响应请求,返回请求值或错误类型等。

Set Request报文:用于设置指定的管理变量。

Trap报文:用于在紧急情况下由被管设备向NMS主动发信息

GetResponse报文:用于响应请求,返回请求值或错误类型等。

Set Request报文:用于设置指定的管理变量。

Trap报文:用于在紧急情况下由被管设备向NMS主动发信息

二、SNMP AGENT的作用和流程

SNMP AGENT在网管站和设备上相关应用模块之间起到了一个翻译传递的作用。具体说包含两个部分:一是接收来自网管站的请求,对报文进行解码,验证团体名合法后,搜索MIB树并调用相应访问函数通知相关模块进行相应操作,并根据相关模块发回的操作结果构造响应报文,编码并发回网管站。二是提供向网管站主动报警的功能,由相关模块发起,在AGENT构造TRAP报文,并编码发送。

SNMP AGENT流程如下(以基于PSOS SNMP协议栈的AGENT为例进行介绍):

Return  0 Other init Snmpvar_init Bind port 161 Create socket Setup_mib Snmp_init() 在other init 对其他接口模块(tcp_mib,ip_mib,ipx_mibetc.)进行初始化.主要是为存放相对应的表的索引分配内存 以上流程中任何一函数失败,此函数返回-1

图4:agent_body流程

在agent_body流程中,函数Process_received_SNMP_packet()是核心。该函数由PSOS协议栈提供。首先对报文进行解码,解码成功后将进行团体名验证。验证通过后,搜索MIB树(MIB树生成方法不再介绍)查找对应的访问函数进行调用,在访问函数中将通知相应模块进行处理。根据返回结果,Process_received_SNMP_packet()将构造报文并进行编码。访问函数包括四种:test(), get(), next(), set(),由开发者自己编写,其实SNMP AGENT开发的很大一块工作就是编写这些访问函数。test()的作用是检查将要GET或SET的对象实例是否存在。如果test()检查失败,将直接构造响应报文指明错误类型和位置并编码。否则将调用get()或set()。 next()的作用是检查将要GETNEXT的对象实例的下一实例是否存在,如果next()检查失败,将直接构造响应报文指明错误类型和位置并编码。否则将调用get()或set()。 get()的作用是获取指定对象实例的值。 set()的作用是设置指定对象实例的值。

开始 解码 成功 团体名验证 N Y 成功 N Y 分析包中内容,在MIB树中 搜索 到变量名对应的节点 Switch PDU类型 不作进一步处理 返回等待下一个请求报文 不作进一步处理 返回等待下一个请求报文 case Gettest_proc成功Y N Get_proc 填入error index      errorstatus caseGetNext Next_proc 成功Y N Get_proc 填入error index      errorstatus case set test_proc 成功Y N Set_proc填入error index      errorstatus 将得到的值填入Vorr Bind 生成Response PDU 编码 返回

图5 Process_received_SNMP_packet()流程

三、 SNMP AGENT与相关应用模块的接口。

网管管理设备的各个模块,实际数据都存储在相关的应用模块中。因此访问函数需要与其他模块接口,通知其他模块进行相应操作,并能得到操作的结果。AGENT与其他应用模块的接口可以有多种方式。以下是我们通常采用的一种方式: XXXX_ioctl( int cmd, char* arg  ) ,其中cmd是命令字,表明了操作的类型是GET还是SET,对表对象它还表明了是表的哪一列。 arg是一个指向结构的指针。该结构分为两部分,第一部分是由表中的若干列所组成的索引,可以唯一确定操作表的哪一行。第二部分是一个C语言的联合体(union),用于存放待设定或取回的值。

SNMP AGENT函数介绍的更多相关文章

  1. java agent 详细介绍 -javaagent参数

    java agent 详细介绍 简介 java agent是java命令的一个参数.参数 javaagent 可以用于指定一个 jar 包,并且对该 java 包有2个要求: 这个 jar 包的MAN ...

  2. python strip()函数 介绍

    python strip()函数 介绍,需要的朋友可以参考一下   函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)        删除s字符串中开头.结尾处,位于 rm删除 ...

  3. PHP ob_start() 函数介绍

    ob_start() 函数介绍: http://www.nowamagic.net/php/php_ObStart.php ob_start()作用: http://zhidao.baidu.com/ ...

  4. Python开发【第三章】:Python函数介绍

    一. 函数介绍 1.函数是什么? 在学习函数之前,一直遵循面向过程编程,即根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复 ...

  5. row_number() OVER(PARTITION BY)函数介绍

      OVER(PARTITION BY)函数介绍 开窗函数               Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个 ...

  6. select与poll函数介绍

    select与poll函数介绍 在所有依从POSIX的平台上,select函数使我们可以执行I/O多路转接.传向select的参数告诉内核: 1)我们所关心的描述符 2)对于每个描述符我们所关心的状态 ...

  7. swift1.2语言函数和闭包函数介绍

    swift1.2语言函数和闭包函数介绍 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护. swift1.2语言函 ...

  8. ZLG_GUI配置与函数介绍

    http://www.docin.com/p-825479457.html ZLG_GUI配置与函数介绍

  9. oracle下的OVER(PARTITION BY)函数介绍

    转自:http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html OVER(PARTITION BY)函数介绍 开窗函数          ...

随机推荐

  1. 【刷题】洛谷 P4142 洞穴遇险

    题目背景 ZRQ在洞穴中准备采集矿物的时候遇险了!洞穴要塌了! 题目来源:zhoutb2333 题目描述 整个洞穴是一个 \(N*N\) 的方格图,每个格子形如 \((X,Y),1 \le X,Y \ ...

  2. Android ActionBar 使用详解

    ActionBar取代了以前的TitleBar,是一种更加灵活的人机交互方式:ActionBar并不是完全自立门户的一个新兴的东西,而是和3.0以下版本的menu进行了合并整合:so,添加action ...

  3. 洛谷 P1501 [国家集训队]Tree II 解题报告

    P1501 [国家集训队]Tree II 题目描述 一棵\(n\)个点的树,每个点的初始权值为\(1\).对于这棵树有\(q\)个操作,每个操作为以下四种操作之一: + u v c:将\(u\)到\( ...

  4. matlab图像

    1.在网络上发现matlab能画出一些很有意思的图形(立体爱心) clc; const=0; x=-5:0.05:5;y=-5:0.05:5;z=-5:0.05:5; [x,y,z]=meshgrid ...

  5. C#调用GDI+1.1中的函数实现高斯模糊、USM锐化等经典效果。

    http://www.cnblogs.com/Imageshop/archive/2012/12/13/2815712.html 在GDI+1.1的版本中,MS加入不少新的特性,其中的特效类Effec ...

  6. OpenResty初涉

    关于openresty可参考官方文档: http://openresty.org/cn/download.html 1.这个是什么? 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡 ...

  7. [DeeplearningAI笔记]序列模型3.9-3.10语音辨识/CTC损失函数/触发字检测

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.9语音辨识 Speech recognition 问题描述 对于音频片段(audio clip)x ,y生成文本 ...

  8. AngularJs编辑器

    问题:在使用过程中遇到的问题就是:angularJS绑定不上值.后来找到一种可以用的方式. html页 <div class="all"> <script typ ...

  9. JVM调优总结(5):典型配置

    以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理 ...

  10. Web中的宽和高

    不同的宽高定义 //网页可见区域宽 document.body.clientWidth //网页可见区域高 document.body.clientHeight //网页可见区域宽(包括边线和滚动条的 ...