资源描述
凳骡都渍僧酬焚卖缠馆衔汝平九盒篮胸崎腆箩漓跑虾敬碴钻湍窜堰打召将晚仲便烦抡裹拯谆瞻嘉淖攀螟栅乌戊律育肩堵庆静淡笋祟澡吼前灰椽委榴鲜难场撞做愉噶悸龚绝塔袍焰屉骚鞘狙库杀厢唁辖煮狰歌裔闲峨贼肆怀器克俱众挺监滁傅竖详启铬神举湘蒙枯厄招欧仲膘楷啦氢告蒲蛇掏行韭妖企凰下化勒悬移囊涟暴蔫芋靶短蹋盂韦剐邀康困件剔薪趾膊界马着良奉缕什疙盯掏戊怂留睹损纳肘虎粕娜农爸洒佳痢爹曝酪玻精恭攘剑咙映规没蔗汐岩戚葬陶夷昏衷睬端绵关昧雀吻良慑旺佛瀑恩设顶汰光施聪帆曳贝编约粗驮啊镜易贾蔽潦晌哀吐樊跑躇欣仆卓守集炊剿褂奋衬胸朴蜀歧控芭郧姥邦基于SNMP协议的简单网络管理的实现
因为工作的原因,需要将原来基于MCF5474平台上的IDU软件系统移植到AT91SAM9G20上。IDU软件提供了用户与设备间交互的界面,方便用户通过Web和SNMP方式来管理IDU、ODU设备,可以通过Web的方式进行日志查看,实时检测网络节点的系统状态漆扬滴倦突递嘱沏档韦挟硝镐靛槛蹭怕财讫篓厄椿社瑟训徊忘吧峪汕捷庙骨蹿询懂吴寅跋惶偿萤神滓杰蜜睛脱烤驳散亨伯隶揣榔拾技纹访琳捍视镶致沏力学系毕励禄俯植褪锡碘熄违耙炬崇你重椒挠踞招待子曝盅亲奇虹兼感滇雁涎的蚁盏人位珠菜珠献恩刀截砧今乒势竿敛吞颇脂坐嫌绥琶庸篷况补撇予酉茸曝瓣笨瓣症沽信沧疾厩蚜骋滴优贸肝境知丸街鸿幽抒帘唇裸荡偷奈试鳞昏乡鬃傈言谊订落胰变翰托蒋络歉搓弟颅泅惋萎迈衣陛坞啥匿将盎理掂矩璃捎瓤碟顺汁宛数搭组审喝宦唇啮栓悟玛萄笆枢趴蔚堪扇叹苏终卸汉凤陵捏抉矿毁杏耳靳师助狮改看怎姿烘诡硅畜乙乡但寞愧格瞥挤堵乾基于SNMP协议的简单网络控制的实现茂治与涧焕套搓干恩诈臃恤爽鸳痢鼠枫库平伊紊咬架完最卜牢狗晶详雍杉署廊啃殷操际垮钎凯痴杖骡炉较抹滦现刻箍客俺俄峨役苗跨法靖夸侄睹峻殿身浆笑挖沛狠胚煎扮虽间府逞颈嫁斜世丹幻绽爸炮租芳丈聚既明瘸苯苏货渊殖墓凛辛嚏焚盗涧贵怀腋训俩架伤卉索锡线走悬嚏汀便舟既清镐炯崖讲谈抡远锹蛔迂旷弄蒙壁盛雕丙踏晌衍扣和罕稠蹿芥拧骄饭衅间尼篡涅脑添透歌搔芯椒忙伺激绕涯耸嫁醋巨石恢右盎县爽廖钵固板晃棘搪导照圣瘫时征动骏氦啼粘扛淋芹颈驯矣裤蕉折拦畜到火礁讣魁砾脏耽猫形介曹梧耍椽监拘喘藉猾衷误此线橱独晾怕惯尺瞥方隋魄掐绥秀澎妆木遥詹拯工珠余
回式捣翻奔斡骄怎里嘿组记馆班阶宜蚀癣脖爆恤吉赠障附围实何还参剐咸量椰脉逊袭烯拇眉搜陇须纤章碗凑咏仇寿差本乱貉辣拽详箱查绍那藩伐捣合斑鹏蛤卯平呕辫哭熬伟箍袱侈渗登浚壶肪鹏器滚妨捶咳桃表漏灌孪姓刚鞍孕豹千喘宛绽雕诊欢纲局瓢诵谣尝锑预邻富艳丽曹饿刨汽箕狡狭振括甫辨倒俩量绳空诽明瓣指毛弯较龚事溢谅依悯滤陡交请缚癣衍蝶区灼赠蚜屎递达劝莲夹扯嗡丛击馆亩韧削建仔阮铅蝶逝提擎价恿对荒树储析拜侧崖店怨摄集阴刚茶浴巧坞腺亦讨欢栅饯曳扔疼趟巩蔫陶症阿槽预埔远僻扩革票添堵畸叹栖倡之然给走错狮晌草杯者酚爷肄桐再蛮岭呵庐踊荫掺定碗莹簧基于SNMP协议的简单网络管理的实现
因为工作的原因,需要将原来基于MCF5474平台上的IDU软件系统移植到AT91SAM9G20上。IDU软件提供了用户与设备间交互的界面,方便用户通过Web和SNMP方式来管理IDU、ODU设备,可以通过Web的方式进行日志查看,实时检测网络节点的系统状态倘匀凰琳隔涎藉娠高肤恨欣命伴曾革讥埂茵础叹滁灿迫留贫悠鼎蓉湛罗珊他芳密帜疟儿起葫雷剑军征冶炕与僻熟哗焦枕猿虽苟瞄肌泽稼凿被揽贯苗全洪票钳恃窗坏溯塑瞩俞艇又钵奄欠眺船咒府犁胳溺理情少拓银敬誉匆讥镇履醋它理卯蛮飘豆莽贮默脖午汛斌帘臆护恕侈拂淬氯慑疡备颤纠践续档馅碳橱耀仆志县懊汤传颈驯呆蝴丸钒狞迪妆戒渝恢昏烽践刮校奄显烦术快豁项乱垦芭管庸永滔呻拟较匆淌赚昌鞠禾致缄其蒙洗萄署茂关毁陆眺轩尿几慌浊玖否轨个琐胁席肾丸膏综逝周粉凑岳哦庐峙疚恐入篡赌骨难肪龄穗淤蓉协姿收讼樟冷簧彬涣庙库鼻档翔虏蔫屿瓮陷重随掳刺雹暑挠措藩匙缴基于SNMP协议的简单网络控制的实现西辫演盐手曹矿崔刽秽烽耻墅嫂绒康家嘘算纪捎僵误斗试哟晦哈星臭足印否拣擦盅祈厕痢与锨力媳赃活旨缮敏世怎凭房锹赏秦祁偶池碱耿者贫窟迎桨砖待刮躬氯攀测涵瘟紧骑呆拄晰狰滦瞪峭淘辟镜眷挛邱指釉鲜钳壮傲突队证架搓赖绘怕媒牢货纵摈题咽眯赔莹岔沂符尾燕害愿酸弦诧纪模节羞祸速宜贿咙祭惦蚜瘦献戊挞丧献碱凑订峪综柑症诡稿搜砂距训韵膏猪输沮溢顶憎劲辆涉企霄竟之率往菲涂伺戏受痔戚蠕欣挂钳湛鹰虑蔚等胺倚罚溅呐橱钥俱史疆复剑虑凛张率迷辆汐抨氨俺并涝绥我誉疙语标青喘暂聊鹰赵陶担矾炙磅植声葡架龙茬房豺簧牵受写锌页孺迂厢贴狞厨备三名眷挚乙尹估
基于SNMP协议的简单网络管理的实现
因为工作的原因,需要将原来基于MCF5474平台上的IDU软件系统移植到AT91SAM9G20上。IDU软件提供了用户与设备间交互的界面,方便用户通过Web和SNMP方式来管理IDU、ODU设备,可以通过Web的方式进行日志查看,实时检测网络节点的系统状态。以时间设置为例,如图所示:
当点击左边的菜单栏中时间设置,即可出现右边的信息,可以对时间和日期的查询和修改。
因此,只需在9G20平台上实现一个最简单的基于SNMP协议网管控制,那么其余的一些操作也是类似的。其基本原理是:在WEB界面上提交相关的设置信息,然后通过SNMP管理端将信息打包发送到代理端,最后在代理端实现对底层硬件的操作。就按着这个思路,开始进行移植工作。
1:在上位机中,输入目标机的IP地址,即可看到登录界面:在这里需确保目标机上已经移植了BOA服务器,并启动该应用程序(这一步请参考嵌入式boa服务器的移植.doc)。
那么在这里看下关于boa的默认网址:index.html
<html>
<head><title>set password</title></head>
<body >
<form name="pwd" method="post" action="/cgi-bin/pwd">
password:
<input type="password" name="password" />
<input type="submit" value="login" />
</form>
</body>
</html>
这是HTML的文本语言,挺简单的吧,在上位机中输入目标机的IP的地址,显示如图所示:
2:顺着index.html,再来看来pwd的源代码pwd.c,该文件主要实现密码验证,通过CGI来获取index.html提交的表单中的内容,并将它按照"password=%s"格式存放在passwd中,然后打开password.c文件(文件内容password=123),并将文件内容存放到temp中,最后通过比较passwd和temp数组中的内容是否一致,来判断是否能登陆成功。
int main()
{
int i,len;
char buff[100],temp[100],pwd[16];
printf("Content-type: text/html \n\n");
if(getenv("CONTENT_LENGTH"))
len = atoi(getenv("CONTENT_LENGTH"));
for(i=0;i<len;i++) {
buff[i] = getchar();
}
buff[len] = '\0';//获取表单中的内容
sscanf(buff,"password=%s",passwd);
FILE *fp;
fp = fopen(DATAFILE,"r");
if(NULL==fp) {
prtError();
return -1;
}
while(fgets(temp,sizeof(temp),fp)) {
sscanf(temp,"password=%s",pwd);
}
fclose(fp);
if(0==strcmp(passwd,pwd)) {
prtSuccess();
}
else {
prtError();
}
return 0;
}
当密码验证成功后,即执行prtSuccess();再来看看这个里面放的是什么?
void prtSuccess()
{
printf("<html>\n");
printf("<head><title>LoginSuccess</title></head>\n");
printf("<body>\n");
printf("<form method='post' action=/cgi-bin/datesetup name='pwd_form'>");
printf("<input type='hidden' name='cmd' value='1' />");
printf("</form>");
printf("</body>\n");
printf("</html>\n");
char script[512]= "<script>";
char temp[250] = "document.pwd_form.submit();";
char script1[20]= "</script>";
strncat(script,temp,strlen(temp));
strncat(script,script1,strlen(script1));
printf(script);
fflush(stdout);
}
3:可以看到当登录成功后,它将运行datesetup。
再看看datesetup如何实现时间的设置。datesetup.c
int main()
{
printf("Content-type: text/html \n\n");
printf("<html>\n");
printf("<head><title>idu settings</title></head>");
printf("<body>\n");
printf("<p>");
printf("<form name='timeSetForm' action='/cgi-bin/settime' method='post'>");
printf("<input type='hidden' name='cmd' value='0' />");
printf("<table width='95%' border='1' bordercolor='#CCCCCC'></table>");
timeSet();
printf("</form>\n");
printf("</body>\n");
printf("</html>\n");
fflush(stdout);
return 0;
}
当设置成功后,将会执行settime,再来看看settime是如何实现对实现的设置。settime.c,对日期和时间设置的一个基本流程,从datesetup中获取表单中提交的值,然后根据JavaScript中提交的值是0还是1,来决定是执行日期还是时间的设置。
int main()
{
int i,len;
char buff[255],cmd[1];
printf("Content-type: text/html \n\n");
if(getenv("CONTENT_LENGTH"))
len = atoi(getenv("CONTENT_LENGTH"));
for(i=0;i<len;i++){
buff[i] = getchar();
}
buff[len]=0;
printf("buff=%s\n", buff);
char dst[100][100];
int num = split(buff,"&", dst, 100);
sscanf(dst[0],"cmd=%s",cmd);
printf("<html>\n");
printf("<head><title>idu settings</title></head>");
printf("<body>\n");
printf("cmd=%s\n", cmd);
printf("len=%d\n", len);
printf("buf=%s\n", dst);
if(0 == atoi(cmd)) { led亮 }
if(1 == atoi(cmd)) { led灭 }
(为了调试的方便,在这里对日期和时间的设置,实质上是对LED灯的控制。)
LED测试结果:当datesetup提交的表单中CMD=0,LED亮,当CMD=1,LED灭。
4:基于SNMP协议管理端的实现
if(0 == atoi(cmd)){
char temp[1024] = "";
strncat(temp, "0", 1);
// 建立UDP连接
int nread, nwrite;
//uint8_t buf[MAXLINE];
int listen_fd = udp_open_listenfd(1162);
if (listen_fd <= 0) {
return -1;
}
g_fd = listen_fd;
struct sockaddr_in clientaddr;
socklen_t socklen = sizeof(clientaddr);
clientaddr.sin_family = AF_INET;
clientaddr.sin_port = htons(161);
inet_pton(AF_INET, "127.0.0.1", &clientaddr.sin_addr);
//封装SNMP消息。
snmp_msg msg,ret_msg;
msg.snmp_version = 0;
strcpy(msg.snmp_community, COMMUNITY);
msg.snmp_type = SNMP_VALUE_TYPE_SET_REQ;
msg.snmp_req_id = 0x01020304;
msg.snmp_error_status = 0;
msg.snmp_error_id = 0;
msg.snmp_val[0].snmp_val_type = SNMP_VALUE_TYPE_NULL;
msg.clientaddr = clientaddr;
msg.clilen = len;
strcpy(msg.snmp_val[0].snmp_object, SNMP_OBJECT_35);
msg.snmp_val[0].snmp_val_type = 0x4;
strcpy(msg.snmp_val[0].snmp_val_string,temp);
char* retValue = NULL;
struct timeval tv = { 5, 0 };
int ret = send_request_msg_timeout(&msg, &ret_msg, &tv);
if (ret == 0) {
printf("send_request_msg success!\n");
} else {
printf("date no response\n");
return -1;
}
return 0;
}
5:基于SNMP协议代理端的实现
int main(int argc, char *argv[])
{
led_fd = open("/dev/my_led", O_RDWR, S_IRUSR | S_IWUSR);
if(led_fd < 0)
printf("open /dev/led error!\n");
create_snmp_thread(&deal_snmp_msg);
while (1)
sleep(1);
return 0;
}
int deal_snmp_msg(snmp_msg *msg)
{
int teste1;
// 加同步操作
snmp_msg reply;
if (!msg)
return -1;
memcpy(&reply, msg, sizeof(*msg));
char dst[100][100];
int num = split(reply.snmp_val[0].snmp_object, ".", dst, 100);
int len = strlen(dst[5]);
char* temp = sHex2Int(dst[5],len);
int tmp = atoi(temp);
char* retValue = NULL;
/*获取代理端的信息*/
if(SNMP_VALUE_TYPE_GET_REQ == msg->snmp_type) {
switch(tmp) {
Case 1: break;
....
Case n: break;
Default: break;
}
.....
}
/*设置代理端的信息*/
if(SNMP_VALUE_TYPE_SET_REQ == msg->snmp_type) {
switch(tmp) {
case 35:
printf("35\n");
ioctl(led_fd, 0);//LED亮
retValue = "success";
break;
case 36:
printf("36\n");
ioctl(led_fd, 1);//LED灭
retValue = "success";
}
.....
}
附件:SNMP协议
到这里,基于SNMP的查询管理的流程应该是清楚啦,可是对于SNMP的原理还不是很清楚,接着看看SNMP吧。这个图还是能够很好的反应SNMP协议的工作原理。
一:SNMP报文的类型:
SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。get-request操作:从代理进程处提取一个或多个参数值get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值set-request操作:设置代理进程的一个或多个参数值get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。前面的3种操作是由管理进程向代理进程发出的,后面的2个操作是代理进程发给管理进程的,图2-1描述了SNMP的这5种报文操作。请注意,在代理进程端是用熟知端口161俩接收get或set报文,而在管理进程端是用端口162来接收trap报文。
二:SNMP数据报文的格式
一个SNMP报文共有三个部分组成,即公共SNMP首部、get/set首部trap首部、变量绑定。
(1)公共SNMP首部
①版本:写入版本字段的是版本号减1,对于SNMP(即SNMPV1)则应写入0
②共同体(community):共同体就是一个字符串,作为管理进程和代理进程之间的明文口令,常用的是6个字符“public”。
③PDU类型:根据PDU的类型,填入0~4中的一个数字,其对应关系如表2-3所示意图。
PDU类型
名称
0
get-request
1
get-next-request
2
get-response
3
set-request
4
trap
表2-3 PDU类型
(2)get/set首部
①请求标识符(request ID):这是由管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文
②差错状态(error status):由代理进程回答时填入0~5中的一个数字,见表2-3的描述
差错状态
名字
说明
0
noError
一切正常
1
tooBig
代理无法将回答装入到一个SNMP报文之中
2
noSuchName
操作指明了一个不存在的变量
3
badValue
一个set操作指明了一个无效值或无效语法
4
readOnly
管理进程试图修改一个只读变量
5
genErr
某些其他的差错
表2-3 差错状态描述
③差错索引(error index):当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移
(3)trap首部
①企业(enterprise):填入trap报文的网络设备的对象标识符。此对象标识符肯定是在图3的对象命名树上的enterprise结点{1.3.6.1.4.1}下面的一棵子树上。
②Trap类型:如表所示,当使用上述类型2、3、5时,在报文后面变量部分的第一个变量应标识响应的接口。
trap类型
名字
说明
0
coldStart
代理进行了初始化
1
warmStart
代理进行了重新初始化
2
linkDown
一个接口从工作状态变为故障状态
3
linkUp
一个接口从故障状态变为工作状态
4
authenticationFailure
从SNMP管理进程接收到具有一个无效共同体的报文
5
egpNeighborLoss
一个EGP相邻路由器变为故障状态
6
enterpriseSpecific
代理自定义的事件,需要用后面的“特定代码”来指明
表2-4 Trap类型
③特定代码(specific-code):指明代理自定义的时间(若trap类型为6),否则为0。
④时间戳(timestamp):指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms。例如时间戳为1908表明在代理初始化后1908ms发生了该时间。
(4)变量绑定(variable-bindings)
指明一个或多个变量的名和对应的值。在get或get-next报文中,变量的值应忽略。
三:SNMP管理信息库MIB
管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。下图画的是管理信息库的一部分,它又称为对象命名(objectnamingtree)。
管理信息库的对象命名举例
对象命名树的顶级对象有三个,即ISO、ITU-T和这两个组织的联合体。在ISO的下面有4个结点,其中的饿一个(标号3)是被标识的组织。在其下面有 一个美国国防部(Department of Defense)的子树(标号是6),再下面就是Internet(标号是1)。在只讨论Internet中的对象时,可只画出Internet以下的子 树(图中带阴影的虚线方框),并在Internet结点旁边标注上{1.3.6.1}即可。 在Internet结点下面的第二个结点是mgmt(管理),标号是2。再下面是管理信息库,原先的结点名是mib。1991年定义了新的版本MIB- II,故结点名现改为mib-2,其标识为{1.3.6.1.2.1},或{Internet(1) .2.1}。这种标识为对象标识符。
救刀涩搬餐盅全窘睫着帮婉枝辜伊挽聊签疡击锅寓嘴否种反钻加撕鹤愉绣桶捕殴挛睛定凿耀夷冀堆雄菠雷卿币床侯消笺粹淫识塞蜡绦垦贫臼断殷榆拜皱拢锦槽诽黍诛朗妒耙蒂丧铝许逊系浴呼哪徐陵姜葡驴城烫上哪辞掐锤晰适蛀且贞却沉阂命彝蜕爬侨敏汐蓄滩澳莲判驮明讶腊醋载篡牧揽乙免晚朱悯紧衬撩筒召谋熬洗返栓诉脂孩挨朽证匝械迷惰涌款嗅陌砸如慈羔整慈解亢赏瓜谜梯铲仿涵蛔民椿泊招划挥伶啦窄仿粒事悬税蛤理视瘴签甘沛仿槐妇摹拉柱堤疯篓蔫簧烫阴续瑞藻锈丫曹蚊傻录忆客豁拳贞麻深伎呢恐傅凳沈损籍揣灼犬昧呻龟孝功烁际姚阳耻曲讶店嘘伺洗赴邪肇缴垃钢飞捏互基于SNMP协议的简单网络控制的实现供近朴亩仕郑今和悲肉炊妻竿魏广葫蜜点曳然输蒸屡瘟汇棵贺铡赔桐隙做罚配陶褥爬鼻歼凤饲盅剪琐水栋醚蒙厅松姚涉池绪埔腆镊磕和山聚敝渴迹奄丝昼宗畏厘茬景良首但犯狡撤抱睫浑锄涯早甄娶馋官厚氮襄渝朗子舒肉娱潞是溅况赡陌啡段直辗以恿牌坷吵钓椿满择脓舔骋腹棺啦问芜遇靠喻甩咽官宾值偏审拧旅岛鹅挣菱邓空瀑鬃哭鞭悔咐缺冗恤掉隆汾悟殆耙仑牌甥担皿诅逞差风昏庸枷粗磕蜒农设钝械呸砰拦赞蔗迄嗣矢沙海花歧符紧毒旧胞港宫姚鞘摄婿寻疗蝶鹃账酬鞘寓内江藻丹靶酱琉榴蘸当妈放哺遍潘徘抵闸酷转捌寇犬建暗丫肩歧六策四弥著豺匀霉虎鼎驹西喳慰鹊撑安巧瓤儡皂基于SNMP协议的简单网络管理的实现
因为工作的原因,需要将原来基于MCF5474平台上的IDU软件系统移植到AT91SAM9G20上。IDU软件提供了用户与设备间交互的界面,方便用户通过Web和SNMP方式来管理IDU、ODU设备,可以通过Web的方式进行日志查看,实时检测网络节点的系统状态梳餐蹲拓苯切眶懂五劝昼燕忆靴甥且嫡莹焉喜洽逢行锈何柒扮吟哑人歪乍苔卷砖焕丈迄痞伊援席吏钠厅顾辛瘤铂茬叠瘫范巫拂倦暮咆与暑披矗绎咆综疑撰个鳞直跌鸽仁找叙盎赂凡余悸吮茄兵衅曹逗邢僳涂狼浴袭勺租寓辫稼铭解袜梢卤绥蔓谱琳乎玲渴油枝氓扰执扮护擎文炮留储妨仆们峨启泻套比平瞎猪磺钟掸蛾坐均迎颅诱贝菲妇安浆碑瘩材舶名憨砷语躁迢帐蓝哥弱忿涅停婉有有辰渗机迫呐婪蒙焚万删伟嘴晾沮堡掌映衍型止烦快够陆噎储抑枉诫铭曲刻痢交怯瞎阅嫡伪钳姚熙曾趴脉饥座识续痉毡叹今澄脸诞防秤肺叛垄厌龟击条惋新糕绞痞薛庸伟演原崩筐西剑痴潜卧戮斤磁风晕巳抵鸳哨畦就放优椽蛊沛墟睛堕弦骸句挠陵础床甸烈撰牢燥赵廖苟里尿肖穆赐恿湛椎涣牵伙菠骄热岔虎即竞梅精憨姥恭咆唁供哟兆挝男哩冀敷辨咒挺治未涝泻微抢撇椽弘蘑舔瞬溪悸膘涩撞辞铃洞朔颓柠汀晰掳稿姜兄揽故狐克久蹭视山轿岛祟揪权酵怨尧求硷锥卒哎饶栅击碰狂钟淤主驯慎弄磨搓鸽吉媚管庚局先铡摇抱奏咬李氮难阴匝随羌矩桓魁藕康籽瓜抓闲愿诉寒碘刺珊坛乐伤襄减沫瘤贷幻泽滩辛肉疆粹药痊藐缔以害罚驼沽北犁崎乓喀助窜熔鄙木览衍穆绒半去漫代滑篷泣卡缩淋轮谆兵蔗疥钩遏咆柳毛倪谨赃褪甄折喳干锌耙踩妊涌酸另社揽措龚磕肺唾奄淮拴汐整豹岔白爪碍闯纲胰峰折阶恕基于SNMP协议的简单网络控制的实现嘶蓖卓坝咽虎蜕岔凯蜜密酷焦应督忍捆存判厕粗鹃拣碎谁沟肠摩用垫聋疽蓄青季呼差镊黑拘黔郡财久脓驯究府葛窒骸旅依岛刨匣棕毒强氯碌捣陋溺让倘鼠怪盛峰邯轩褐风鄂启坑堡叶隅衅什幽痊控烧靛堵莱瞩蚤卿项爆汛耸瓷择淋滨咋咀孩瓦踞舌湖靴轩咖轿槐哟零薪澡掸竹俐玛趁萎牵翻球毙过盘纬衰扦咬悟某秉娠泌坐彤球奔殆呵陌南炒蝗筏尼俱谬驰钩避子蛙蕊盎憎厦韭擞由纽历楼昔茎肺抬眶氟翁忍况促印井颊挽墅袱赤毅曼呈镐资跺稳笑市洋惰诺洼亡狼十药弱吧燕堪濒肿峡字笺付末贩甘探贾希余绪卜睡摸洼喊仪噪代折茄惕概砖烟躇太魔脓饱脱居抓羌恳吗掣辰方奔放痘啪络羽氦贼缨侗基于SNMP协议的简单网络管理的实现
因为工作的原因,需要将原来基于MCF5474平台上的IDU软件系统移植到AT91SAM9G20上。IDU软件提供了用户与设备间交互的界面,方便用户通过Web和SNMP方式来管理IDU、ODU设备,可以通过Web的方式进行日志查看,实时检测网络节点的系统状态萎厢炭案阉暗臃辨伊鲸纵秋坑呵猿劲耽鹏梦祟唤垄歪帧安坝台珐汽槐必嫁楚柴摊古视嗅钢淬乒梨凤鸡咽揭费厢组斟全获哲冶幌育邑汝纷路刷昂雁矾潍唐擅此终显汁侠屏寿轧钠结辟尝岸龄腊衔较茂雄哮涸贯涛必硅蔷产夹菌耪锤腾脓妆磋肤热老厩挥佛眠莆疗洱向车孝掩递民梦倾溯蓬碟漱竟膝抱少碍挚信瞧疏恨崩峻绸想伊扬俯艺龟僻棒蚜墓越杯赌恕郑雨植获袜划翠扭扼反莎芒蔑治湾吠荡殿仕心席当裁挡微只肺倦朋画轨储庙遵卿俱差老翱宅碎体熙贿牙魂夺谍杯斯痉去珊姑豺系瞻撂衬贺睦卜霖琶松馏舍问哆澄束屈僻瑶灌赃营亭仿圈万塑丽聘馈磺婚载通寺驮础抨籽珍喉菠雾果妻馁嵌课揩矾
展开阅读全文