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),用于存放待设定或取回的值。

转载于:https://www.cnblogs.com/zhouhbing/p/4225632.html

SNMP AGENT函数介绍相关推荐

  1. snmp 获取设备类型_SNMP开发系列(三)SNMP Agent的实现

    SNMP在IT运营.网络设备管理.通信网元管理.物联网上应用广泛.以下章节将分析Linux/pSos等嵌入式环境下SNMP Agent流程特点及使用嵌入式设计SNMP Agent的技术细节(其中涉及到 ...

  2. SNMP 网络协议介绍

    这里填写标题 1. SNMP 网络协议介绍 1.1. 什么是 SNMP 1.1.1. 概述 1.1.2. SNMP 版本 1.2. OIDs 1.2.1. 什么是 OID 1.2.1.1. 可查询数量 ...

  3. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  4. C语言中的scanf()函数介绍

    1.scanf函数:读取从键盘输入的数据 在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据 getchar().get ...

  5. 延时函数介绍和呼吸灯的实现

    文章目录 延时函数介绍 呼吸灯原理 杨桃32学习笔记,本文图片文字皆为转述 延时函数介绍 分为delay_s秒,delay_ms毫秒,delay_us微秒延时,最大参数不能超过65535. 呼吸灯原理 ...

  6. ×××S 2012 参照函数 -- 介绍

    ×××S 2012 参照函数 -- 介绍 在×××S中,一张报表内可以同时包含多个数据集,但是一个数据区域就仅限于一个数据集,如果希望同时参考多个数据集,查找函数就能轻松办到,其概念类似JOIN是通过 ...

  7. 【 MATLAB 】rem 函数介绍

    rem函数和mod函数很相似,二者认真看一个,另一个看一下区别即可. mod函数介绍:[ MATLAB ]mod 函数介绍 rem Remainder after division Syntax r ...

  8. 【 MATLAB 】filter 函数介绍 之 Filter Data in Sections

    [ MATLAB ]filter 函数介绍(一维数字滤波器) 在上篇博文中,里面有一个例子,就是过滤部分中的数据,这个部分中的数据的意思是如果有一个向量需要过滤,我们可以把它分为几段,然后分段过滤. ...

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

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

最新文章

  1. 我与Linux的相识之旅
  2. 蓝牙杂散超标_杂散发射
  3. 【音乐理论】音与音高 ( 音域 | 音符表示 )
  4. Matplotlib实例教程 | 句子长度累积分布函数图
  5. 删除矩阵中的任意一列元素
  6. python输入数据爬取_python根据用户需求输入想爬取的内容及页数爬取图片方法详解...
  7. JS中for in 与 for of
  8. Golang教程:(十五)指针
  9. 系统工程师加薪必备技能-活动目录 (Active Directory)
  10. Windows Driver开发_NT Driver框架:The driver is not in a state to accept this command
  11. 一个月的java工作总结
  12. 计算机硬盘被配置成动态磁盘,动态硬盘
  13. 在虚拟机上搭建中标麒麟Neokylin6桌面版开发环境
  14. 互联网金融涌动下的冲动与借债
  15. kubernetes部署分布式存储longhorn
  16. 使用Blinker APP+NodeMCU控制多路接口
  17. Cocos2d-x 屏幕适配
  18. MySQL报错no connection established
  19. 聊聊A股市场反映情况
  20. WEB HTML 二级菜单 折叠展开菜单

热门文章

  1. 2018人工智能行业创新情报白皮书
  2. 机器人产业的前途取决于人工智能关键技术的发展
  3. 量子计算远没到可收割的时候
  4. 编程能力差!90%输在这点上!谷歌AI专家:其实都是瞎努力!
  5. 连肝 7 个晚上,总结了 66 条计算机网络的知识点
  6. P2924 [USACO08DEC]大栅栏Largest Fence
  7. leecode---46---数组,dfs---求出数组的所有组合
  8. scala recursive value x$5 needs type
  9. bzoj 3743 [Coci2015]Kamp——树形dp+换根
  10. 第一次使用Plesk云主机面板?5招搞定!