freertos 基于lwip实现的snmp协议
1、snmp 应用层网络管理协议
2、基于udp实现
3、snmp协议主要功能包括
服务端发送get 读请求节点的udp数据包
客服端设备主动进行trap上报数据
4、下图是PC机作为服务端发送get请求命令,
请求命令格式如下图:
5、设备节点主动trap上报报警信息实现代码
#include "trap.h"
#include "delay.h"
#include "sensor.h"
#include "FreeRTOS.h"
#include "semphr.h"
#include "snmp.h"
#include "tcpip.h"
#include "minIni.h"#include "dm9000.h"#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#include "camera.h"
#include "adc.h"
#include "rtc.h"#include "lwip_comm.h"#define NUM_PRIVATE_TRAP_LIST 5
extern struct snmp_msg_trap trap_msg;struct trap_list trap_list_bank[NUM_PRIVATE_TRAP_LIST];
extern void vSendTrapCallback2( void * parameters );
struct trap_list * getNextFreePrivateTrapList();
extern void freePrivateTrapList(struct trap_list * list);void trap_task(void * pvParameters)
{portTickType xLastWakeTime;static unsigned char trap_flag=1;u8_t snmpauthentraps_set= 2;static ip_addr_t trap_addr;char msg_vol[5],msg_cur[5];struct snmp_obj_id objid = {10, {1,3,6,1,4,1,1,1,1}};//struct snmp_obj_id objid[22];
// struct snmp_obj_id objid_vol = {10, {1,3,6,1,4,1,1,1,1}};
// struct snmp_obj_id objid_cur = {10, {1,3,6,1,4,1,1,1,2}};
// struct snmp_obj_id objid_tem = {10, {1,3,6,1,4,1,1,1,3}};
// struct snmp_obj_id objid_hum = {10, {1,3,6,1,4,1,1,1,4}};
// struct snmp_obj_id objid_water = {10, {1,3,6,1,4,1,1,1,5}};
// struct snmp_obj_id objid_door = {10, {1,3,6,1,4,1,1,1,6}};
// struct snmp_obj_id objid_sys12= {10, {1,3,6,1,4,1,1,1,7}};
// struct snmp_obj_id objid_bak12 = {10, {1,3,6,1,4,1,1,1,8}};
// struct snmp_obj_id objid_ups= {10, {1,3,6,1,4,1,1,1,9}};
// struct snmp_obj_id objid_ac24 = {10, {1,3,6,1,4,1,1,1,10}};
// struct snmp_obj_id objid_ac1= {10, {1,3,6,1,4,1,1,1,11}};
// struct snmp_obj_id objid_ac2 = {10, {1,3,6,1,4,1,1,1,12}};
// struct snmp_obj_id objid_ac3= {10, {1,3,6,1,4,1,1,1,13}};
//
// struct snmp_obj_id objid_fan= {10, {1,3,6,1,4,1,1,1,14}};
// struct snmp_obj_id objid_alarm = {10, {1,3,6,1,4,1,1,1,15}};
// struct snmp_obj_id objid_light= {10, {1,3,6,1,4,1,1,1,16}};
//
// struct snmp_obj_id objid_heat= {10, {1,3,6,1,4,1,1,1,17}};
// struct snmp_obj_id objid_dc1= {10, {1,3,6,1,4,1,1,1,18}};
// struct snmp_obj_id objid_dc2 = {10, {1,3,6,1,4,1,1,1,19}};
// struct snmp_obj_id objid_dc3= {10, {1,3,6,1,4,1,1,1,20}};
// struct snmp_obj_id objid_dc4= {10, {1,3,6,1,4,1,1,1,21}};struct snmp_varbind *vb;struct trap_list *vb_list;(void) pvParameters;// trap_addr.addr=((u32_t)((lwipdev.snmpip[3]) & 0xff) << 24) | \
// ((u32_t)((lwipdev.snmpip[2]) & 0xff) << 16) | \
// ((u32_t)((lwipdev.snmpip[1]) & 0xff) << 8) | \
// (u32_t)((lwipdev.snmpip[0]) & 0xff);trap_addr.addr=((u32_t)((210) & 0xff) << 24) | \((u32_t)((0) & 0xff) << 16) | \((u32_t)((168) & 0xff) << 8) | \(u32_t)((192) & 0xff);snmp_trap_dst_ip_set(0,&trap_addr);snmp_trap_dst_enable(0,trap_flag);snmp_set_snmpenableauthentraps(&snmpauthentraps_set);for ( ;; ){ xLastWakeTime = xTaskGetTickCount(); vb_list = getNextFreePrivateTrapList();vb_list->spc_trap = 12;changed_trap(&objid,SYS12_STAT);// if(sys12_stat_changed)
// {// sys12_stat_changed=0;
// objid[6]=objid_sys12;
// changed_trap(&objid[6],SYS12_STAT);
// }
// if(bak12_stat_changed)
// {// bak12_stat_changed=0;
// objid[7]=objid_bak12;
// changed_trap(&objid[6],BAK12_STAT);
// }
// if(ups_stat_changed)
// {// ups_stat_changed=0;
// objid[8]=objid_ups;
// changed_trap(&objid[8],UPS_STAT);
// }
// if(ac24_stat_changed)
// {// ac24_stat_changed=0;
// objid[9]=objid_ac24;
// changed_trap(&objid_ac24,AC24_STAT);
// } // Wait for the next cycle.vTaskDelayUntil( &xLastWakeTime, 1000);}
}/** 函数名:struct trap_list * getNextFreePrivateTrapList()* 描述 :发送还没发送的trap 并标记已发送* 输入 :无* 输出 :无 */
struct trap_list * getNextFreePrivateTrapList()
{u8_t index;struct trap_list * result = NULL; for(index = 0; index < NUM_PRIVATE_TRAP_LIST; index++){if(!trap_list_bank[index].in_use){trap_list_bank[index].in_use = 1;result = &trap_list_bank[index]; break;}} return result;
}/** 函数名:void vSendTrapCallback2( void * parameters )* 描述 :trap上报回调函数* 输入 :无* 输出 :无 */
void vSendTrapCallback2( void * parameters )
{struct trap_list * param;if( parameters != NULL ){param = (struct trap_list *) parameters;trap_msg.outvb = param->vb_root;snmp_send_trap(SNMP_GENTRAP_ENTERPRISESPC,param->ent_oid,param->spc_trap);freePrivateTrapList(param);}
}/** 函数名:void freePrivateTrapList(struct trap_list * list)* 描述 :trap上报完释放内存* 输入 :无* 输出 :无 */
void freePrivateTrapList(struct trap_list * list)
{snmp_varbind_list_free(&list->vb_root);list->ent_oid = NULL;list->spc_trap = 0;list->in_use = 0;
}/** 函数名:void changed_trap(struct snmp_obj_id *objid,float VOL)* 描述 :指定节点 上报对应的 状态量* 输入 :无* 输出 :无 */
void changed_trap(struct snmp_obj_id *objid,u8 data)
{char msg[5];static u8 msglen;struct trap_list *vb_list;struct snmp_varbind *vb;vb_list->ent_oid =objid;sprintf(msg, "%d", data);msglen=strlen(msg);vb = snmp_varbind_alloc(objid, 4, msglen);if (vb!= NULL){msglen=strlen(msg);memcpy (vb->value, &msg, msglen); snmp_varbind_tail_add(&vb_list->vb_root,vb);} tcpip_callback(vSendTrapCallback2, vb_list);
}
freertos 基于lwip实现的snmp协议相关推荐
- Java基于Snmp4j库实现SNMP协议的调用
在进行SNMP协议调用之前,要先保证主机和目的机器可以通信,可以用ping工具来尝试连通性,如果可以通信,可直接跳转到第二章节和第三章节查看协议的调用:如果不能通信,即不在同一个网段,那么需要先按照第 ...
- lwIP中的snmp
一.概述 lwIP官网介绍snmp lwip-SNMP移植 LwIP的SNMP学习笔记 RT论坛上的"LWIP下的SNMP协议" lwip下SNMP的移植实现,表的获取问题 How ...
- 配置snmp_多种设备基于 SNMP 协议的敏感信息泄露漏洞数据分析报告
作者:知道创宇404实验室 1. 更新情况 2. 事件概述 SNMP协议[1],即简单网络管理协议(SNMP,Simple Network Management Protocol),默认端口为 161 ...
- zabbix基于SNMP 协议监控路由器
zabbix基于SNMP 协议监控路由器 步骤 步骤超级方便. 1. 路由器上开启snmp 2. 确保外网能访问到 3. 用snmpwalk测试 4. 添加zabbix主机,SNMP interfac ...
- 基于snmp协议监控华为s5720交换机
类别 节点信息 对应节点的OID 备注 设备状态监控 CPU利用率 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5 盒式设备获取CPU利用率和内存利用率的大小还可以使用另一个节点 ...
- 【正点原子FPGA连载】第三十一章基于lwip的echo server实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
第三十一章基于lwip的echo server实验 随着物联网的兴起,万物互联需要一个强大而又灵活的协议体系,TCP/IP协议得天独厚,而在嵌入式网络设备中,由于硬件资源的限制,需要特殊的实现方式.L ...
- NetDevOps — SNMP 协议
目录 文章目录 目录 SNMP 协议架构 局限性 SNMP SNMP 协议的第 1 个相关 RFC 1065 发布于 1988 年,距今已有 30 年. SNMP 在网络监控领域已经被广泛使用,例如: ...
- SNMP协议介绍和操作截图
第一章 SNMP协议介绍 SNMP协议 基于TCP/IP的网络管理包含3个组成部分: 1) 一个管理信息库MIB(Management Information Base).管理信息库包含所有代理进程的 ...
- 系统监控之SNMP协议理解
使用Mycat分布式数据库中间件时需要对各个性能指标进行监控,官方已经提供了一个监控软件,于是讨论起来监控是怎么具体可能有哪些实现,虽然知道已经有很多的监控软件可以使用,比如zabbix,但是今天听同 ...
最新文章
- linux如何运行qt源码,Linux/Ubuntu下编译Qt4.8.2源码
- android 屏蔽快速点击,Android-如何防止用户过快频繁点击按钮(一)
- 句柄与指针的区别(二)
- 如何修改firefox的默认缩放比
- BZOJ4471 : 随机数生成器Ⅱ
- presto distinct用法
- Futter基础第1篇: 实现输出Hello World【MaterialApp、Scaffold】
- 番茄是水果还是蔬菜这事儿,居然闹到了最高法院?!
- java中enum怎么用_java 中enum的使用方法详解
- 思科路由器Ez***测试
- 网页版微博HTML解析和提取,使用Beautiful Soup抽取网页数据,解析微博用户关注信息...
- HenCoder Android开发进阶系列学习笔记
- GOF设计模式——工厂模式
- linux系统中使用百度云盘
- .md文件中插入本地图片并显示图片预览
- B2B平台显现5大价值特征和6种商业创新模式
- LeetCode题解(1647):字符频次唯一的最小删除次数(Python)
- 机器人运动估计——IMU运动方程与ESKF原理介绍(下)
- Python 操作 Excel,如何又快又好?
- ubuntu安装pcl 教程
热门文章
- 不知名的用户可以通过病毒推文赚钱
- CSS元素的width和水平margin的设置
- 【读论文(paper reading)】Hydrophobic and Hydrophilic Solid-Fluid Interaction
- 为什么要软件测试?测试可追溯性会带来什么改变?
- 关于阿里云备案和腾讯云备案的吐槽
- 公告 | FISCO BCOS v3.0-rc4发布,新增Max版,可支撑海量交易上链
- 黄聪:Scrapy 轻松定制网络爬虫
- 水和计算机房怎么用英语写,和“水”相关的英文表达,你能说出几个?
- 山西高中计算机会考成绩查询入口,2018年山西会考成绩查询时间及入口
- python全栈开发—函数整理(最后一次整理,不能再全了)