SNMP功能开发简介 六 snmp功能开发阶段性总结
先說客戶需求:能夠通過SNMP協(xié)議獲取設備信息便于管理。客戶提出的需求信息轉化成MIB結點都是Get類請求。
背景&方案:我們的產(chǎn)品業(yè)務層是使用Go語言開發(fā)的,系統(tǒng)層基于OpenWrt(一個嵌入式的 Linux 發(fā)行版)。SNMP功能一年前在上家公司里接觸過,當時是因為生產(chǎn)產(chǎn)品的時候需要通過snmp去進行相關的升級操作,那個時候還專門學測試了一下MIB結點的添加,也能夠成功運行。雖說接觸過,但也僅僅是MIB結點的添加,這次的任務是是設備支持snmp功能,從頭開始設計snmp的話有點不現(xiàn)實,一方面協(xié)議很多內(nèi)容很多,要設計的話考慮方方面面,短期內(nèi)無法完成,另外一個方面,感覺還是有點困難,⊙﹏⊙‖∣
老板的建議是找一下相關的庫進行移植,去github上逛了一圈,Golang的SNMP版本目前還沒有完善的版本,大部分的Golang SNMP項目都是開發(fā)NMS(網(wǎng)絡管理工作站)而不是SNMP Agent代理,所以就采用C版本的net-snmp,net-snmp是開源的SNMP項目,功能完善而且易于二次開發(fā),基本方案是將net-snmp里面的代理功能嵌入到我們的程序中,然后在根據(jù)客戶需求添加私有MIB結點。代碼采用CGO編寫,即Go代碼調(diào)用net-snmp庫的形式。
方案架構:啟動一個獨立的代理線程處理外部snmp請求,代理線程執(zhí)行net-snmp庫的代理入口(snmpd.c/SnmpDaemonMain()),net-snmp程序默認是讀取配置文件的方式來啟動,根據(jù)需求要能夠允許用戶通過web頁面進行配置,所以這里采用的方案是主進程監(jiān)聽web配置刷新事件,如果收到配置刷新的話,將配置更新到全局變量中,然后通過發(fā)送信號通知線程刷新配置,代理線程收到信號會進行相關的操作。這里的操作需要對net-snmp庫代碼做一些修改,即增加一些API用于從共享變量中讀取數(shù)據(jù)。
功能開發(fā):
待開發(fā)功能:
總結
以上是生活随笔為你收集整理的SNMP功能开发简介 六 snmp功能开发阶段性总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 湖南军校哪些好?
- 下一篇: Golang Study 三 map的顺