基于工业以太网交换机的SNMP代理实现
- 格式:pdf
- 大小:262.81 KB
- 文档页数:6
基于工业以太网交换机的SNMP代理实现1引言尹雪,于海(国网电力科学研究院信通所,南京211100)摘要:SNMP(简单网络管理协议)是当今最流行的网络管理协议。
该文以工业以太网交换机为平台,构建了以太网交换机的SNMP网络管理模型,实现了基于以太网交换机的SNMP代理。
读者可以了解到带有网络管理功能的交换机的软硬件体系结构,MIB 库的构建,在Linux下SNMP代理软件的实现方法。
同时,也介绍了在Linux下Netlink socket的应用及设备驱动程序的编写。
关键词:以太网交换机;简单网络管理协议;管理信息库SNMP Agent Realization Based on Industry Ethernet SwitchYIN Xue, YU Hai(Research Institute of Information Technology & Communication, SGEPRI, Nanjing 211100, China)Abstract: SNMP is the most popular network management protocol now. This paper take the industry Ethernet switch as a platform, An Ethernet switch's network management model is constructed based on the SNMP, the SNMP agent is realized on the Ethernet switch. The reader could know the software and hardware architecture of managed switch, how to build MIB and the achieving of the SNMP agent software on Linux platform. At the same time, the application of Netlink socket on Linux, and the writing of Linux device driver are also proposed.Keywords: ethernet switch, SNMP, MIB网络是一个非常复杂的分布式系统,为了对网络资源进行监视、测试、配置、评价和控制,我们需要对网络进行必要的管理,这便是人们熟知的网管的概念。
它可以让网络管理员通过网络管理程序对网络上的资源进行集中化管理,这一过程通常包括数据收集、数据处理, 然后提交给管理者;它可能还包括分析数据并提供解决方案,甚至可以不需要打扰管理者而自动处理某些情况。
工业以太网交换机主要是应用于复杂的工业环境中的实时以太网数据传输。
以太网在设计时,由于其采用载波侦听多路复用冲突检测(CSMA/CD机制),在复杂的工业环境中应用,其可靠性大大降低,从而导致以太网不能使用。
工业以太网交换机采用存储转换交换方式,同时提高以太网通信速度,并且内置智能报警设计监控网络运行状况,使得在恶劣危险的工业环境中保证以太网可靠稳定的运行。
交换机中加入网络管理功能是当今交换机的发展趋势。
工业以太网交换机不但要具备命令行方式作者简介:尹雪,男,硕士,助理工程师,从事信息通信产品研发;E-mail: yinxue200610@的网管功能,在其上加入SNMP代理,提供与其他设备互通的可操作性,增加友好的图形界面,也已经成为行业的共识。
本文就是介绍如何在工业以太网交换机实施SNMP网管模型的架构,并在其上运行SNMP代理,使其具有了网络管理的功能。
下面详细介绍一下基于工业以太网交换机平台的SNMP代理的实现。
2简单网络管理协议(SNMP)简单网络管理协议SNMP(Simple Network Management Protocol)是目前最常用的网络管理协议。
SNMP中的管理程序和代理程序按客户服务器方式工作。
管理程序运行SNMP客户程序,而代理程序运行SNMP服务器程序,即网络管理代理程序,简称为代理(agent)。
在被管对象上运行的SNMP服务器程序不断监听来自管理站的SNMP客户程序的请求(或命令)。
一旦发现,便立即返回管理站所需信息或执行某个动作。
由此可以看出,网管系统中往往是一个或少数多个客户程序与很多的服务器程序进行交互。
通过以上介绍可知,通过将SNMP嵌入数据通信设备,如交换机中,就可以从一个中心站管理这些设备,并以图形方式查看信息。
SNMP正是提供了良好的图形化界面,弥补了命令行方式的不足,简化了网管的工作,也大大提高了网络管理的效率。
图1 SNMP Agent、MIB库和底层设备驱动层三者之间的关系3以太网交换机SNMP网管模型的架构对于工业以太网交换机的监控管理,本文采用SNMP网络管理模型,它由管理者(Manager)、代理(Agent)、SNMP通信协议、管理信息库(MIB)四要素组成。
管理者作为后台网络管理员与网络管理系统的接口,在整个网络管理系统中担当监控者。
在本网管模型中,管理者采用开放型模式,利用第3方SNMP管理软件实施操作。
采用该模型,管理者便可通过SNMP通信协议实现远程管理以太网交换机。
在工业以太网交换机中,SNMP代理可分解成以下4大模块与2大接口:SNMP通信协议处理模块、编解码模块、Agent主模块、Notification模块,以及与MIB文件进行交互的MIB访问接口、与底层设备(交换芯片)驱动进行通信的设备访问接口(如图1所示)。
SNMP通信协议模块是基础模块,主要负责接收SNMP协议报文,提取协议数据单元PDU交付给编解码模块,获取编解码模块传递来的数据,封装成SNMP协议报文,发送至网络。
编解码模块:编码:根据Agent主模块或Notification模块传递来的数据, 按照对应的ASN.1语法,以基本编码规则BER(basic encoding rule)进行编码后,交付给SNMP通信模块进行封装发送;解码: 根据SNMP 通信模块交付的PDU 协议数据单元,按照基本编码规则BER解码PDU,还原成ASN.1抽象语法对应的对象实体和参数,交付Agent主模块处理。
Agent主模块:根据编解码模块解析出的来自管理者的轮询或定时请求,通过MIB访问接口将该命令映射到具体的MIB实体上,并经由设备访问接口,从交换芯片驱动提取或设置该MIB实体对应的具体数值。
监视该请求的执行结果,将其返回给管理者。
Notification模块:当监控到交换机出现异常情况时,该模块将采取中断方式组织信息,提交到编解码模块,并经由SNMP通信模块通知管理者。
4基于以太网交换机平台的SNMP代理实现4.1硬件结构简介图2中BCM Switch代表交换芯片,在交换机的实际应用中,根据产品层次化的不同要求,可以选择不同类型不同厂家的芯片,例如Broadcom公司的BCM系列,中低端的Marvell系列芯片,这些芯片一般都提供了MDC/MDIO作为芯片的控制接口,交换芯片外接实际的电口或光口。
本交换机便使用这样的结构,使用Motorola PowerPC 作为处理器,修改网卡驱动中PHY初始化部分的内容,取而代之的是对交换芯片的检测,利用EMAC控制器通过MDIO方式管理交换芯片。
需要指出的是,图2只是以单芯片结构为例,在实际开发中,往往是多芯片级联。
图2 硬件结构简介交换机软件主要实现控制流的功能。
控制流主要包括两个通道,即通过MDIO方式进行芯片寄存器读写和MGMT(以太网控制管理)报文的接收和发送。
在操作系统的选择上,我们选用Linux作为嵌入式操作系统,它代码公开,这有利于开发应用程序,也可以很方便地进行裁减,减少对硬件资源的浪费。
Linux 是开源软件,降低了交换机开发的成本,这也是工程中必须考虑重要因素。
这里我们选用在网络程序开发上具有优势的Montavista linux。
4.2代理软件的具体实现在Linux上,使用C语言进行编码, 选择了应用广泛的NET-SNMP软件包作为SNMP Agent,版本是5.5。
交换机整个软件的体系结构如图2所示。
4.2.1 底层驱动程序的编写交换机硬件主要是PowerPC处理器和BCM交换芯片,而设备驱动程序便是内核和机器硬件之间的接口。
由于Linux下设备驱动程序的实现在很多资料上都有介绍,这里只简单介绍一下对交换芯片的Linux驱动程序的实现,以MDC/MDIO的实现为例。
MDC/MDIO一般用于访问PHY芯片,也可对某些非PHY芯片的内部寄存器进行访问,例如图1所示的交换芯片BCM56338。
MDC/MDIO采用两根线,一根为时钟线(MDC),还有一根为数据线(MDIO),数据在时钟上升沿有效;对BCM56338而言,它提供了一个伪PHY(内含一系列读写控制寄存器和数据寄存器),作为读写内部寄存器的接口。
在驱动程序中通过对EMAC地址设定和选择合适的时钟分频,便可采用MDC/MDIO对该PHY进行读写,从而完成对交换芯片内部寄存器的读写操作。
对于编写不同硬件设备的驱动程序,其主要目的还是在于向上层软件屏蔽底层操作,为上层软件提供更抽象的硬件视图,这样也有利于上层软件的移植。
图2很清楚地展示了设备驱动程序在整个交换机软件结构中的地位,驱动程序最主要的功能在于它是硬件操作的接口,针对于交换机开发,由于上层协议软件包的功能强弱不同,对于驱动程序的实现内容也有很大差别。
对于上层通信协议软件包,可以直接购买第三方软件,例如IP Infusion公司的Zebos,也可以自主开发,例如华为的通用路由平台VRP。
4.2.2 Netlink Socket实现MIB库中信息是通过程序从底层内核中获取,这便涉及到用户态进程与内核进程的交互,这种交互可通过各种各样的用户态和内核态的IPC机制来实现。
比如系统调用,ioctl接口,proc文件系统以及netlink socket。
netlink socekt是一种用于在内核态和用户态进程之间进行数据传输的特殊的IPC。
它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket接口的方式,实现了一种全双工的通讯连接。
图3 软件体系结构BCM56338交换芯片的SDK软件包提供了各种API,这些API可以提供丰富的交换芯片实时的状态和端口信息等,而MIB库中对象的值便是基于这些信息的加工处理。
很显然,使用netlink socket获取底层信息的方式没有充分利用上层协议软件,而是直接从交换芯片获取,这样的实现主要是因为:一、上层协议软件包不一定很好地支持SNMP,没有提供对于的API;二、使用Netlink socket比较直接和简单,对于信息的处理比较灵活。