求助:stm32+Lwip+snmp,哪位高手有相关的资料或者是例子,.....
需要关于stm32+Lwip+snmp的相关资料或者例程,重点是snmp,不是很明白,希望有高手赐教或者是提供参考资料,非常感谢。不要发Lwip的资料,重点是 “snmp” !!! 以太网芯片暂时用的是 enc28j60,自己顶一下。 没有高手会吗,不用lwip也行,能实现 snmp就行,给点思路或者资料。 楼主是什么行业的呢?我做了多年的嵌入式SNMP了,我是CATV行业的。 armstrong 发表于 2013-8-27 21:38 static/image/common/back.gif
楼主是什么行业的呢?我做了多年的嵌入式SNMP了,我是CATV行业的。
我就是从事电子设备的开发,最近要在MCU上用到snmp,我不是很懂TCP/IP,能给我一点点资料吗,谢谢了先。 楼主可以搜下net-snmp,这个在linux上实现得比较多,不知道STM32上能不能用 xi_liang 发表于 2013-8-28 08:26 static/image/common/back.gif
楼主可以搜下net-snmp,这个在linux上实现得比较多,不知道STM32上能不能用
stm32上可以实现,我可以借鉴一下linux的,感谢你。 建议使用LWIP里的SNMP,不过只支持V1 本帖最后由 qllaoda1 于 2013-8-28 09:48 编辑
我在uip和Micorchip的协议栈上都做过SNMP,uip那个只支持到V2C,Microchip那个SNMP挺强的,V3都支持,这个在没有OS支持的协议栈里是很少见的,这个是完全开源的,Micrcohip的使用文档里对使用方法介绍也很详细。 qllaoda1 发表于 2013-8-28 09:44 static/image/common/back.gif
我在uip和Micorchip的协议栈上都做过SNMP,uip那个只支持到V2C,Microchip那个SNMP挺强的,V3都支持,这个 ...
能否发个资料给我,感谢。 东海傲虾 发表于 2013-8-28 10:32 static/image/common/back.gif
能否发个资料给我,感谢。
你还不如去microchip官网去下载呢,文件很大,263MB呢。
这个包里,什么都有,你去下载看看:
microchip-application-libraries-v2013-02-15-windows-installer 看这个之前你最好先学点SNMP的基础知识,什么叫SNMP ,什么叫MIB之类的。 我自己实现的代码,作为例子,system子树的MIB代码这样的:
////////////////////////////////////////////////////////////////////////////////
// sysDescr节点的GET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.1;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:OctetString (SIZE (0..255));
// 新的类型定义:ASN_OCTET
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysDescr_Get(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
unsigned len;
len = snmpIfPF.snmp.get_sysDescr(globalTextBuffer, SNMP_TEXT_LEN);
return mib_set_string(vobj, globalTextBuffer, len);
}
////////////////////////////////////////////////////////////////////////////////
// sysObjectID节点的GET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.2;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:Id;
// 新的类型定义:ASN_OID
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysObjectID_Get(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
return mib_set_oid(vobj, snmpIfPF.snmp.sysObjectID->nodes, snmpIfPF.snmp.sysObjectID->len);
}
////////////////////////////////////////////////////////////////////////////////
// sysUpTime节点的GET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.3;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:TimeTicks;
// 新的类型定义:ASN_TIMETICKS
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysUpTime_Get(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
return mib_set_integer(vobj, snmpIfPF.snmp.get_sysUpTime());
}
////////////////////////////////////////////////////////////////////////////////
// sysContact节点的GET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.4;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:OctetString (SIZE (0..255));
// 新的类型定义:ASN_OCTET
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysContact_Get(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
unsigned len;
len = snmpIfPF.snmp.get_sysContact(globalTextBuffer, SNMP_TEXT_LEN);
return mib_set_string(vobj, globalTextBuffer, len);
}
////////////////////////////////////////////////////////////////////////////////
// sysContact节点的SET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.4;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:OctetString (SIZE (0..255));
// 新的类型定义:ASN_OCTET
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysContact_Set(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
snmpIfPF.snmp.set_sysContact(vobj->octet.ptr, vobj->octet.len);
return ERRSTAT_NOERROR;
}
////////////////////////////////////////////////////////////////////////////////
// sysName节点的GET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.5;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:OctetString (SIZE (0..255));
// 新的类型定义:ASN_OCTET
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysName_Get(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
unsigned len;
len = snmpIfPF.snmp.get_sysName(globalTextBuffer, SNMP_TEXT_LEN);
return mib_set_string(vobj, globalTextBuffer, len);
}
////////////////////////////////////////////////////////////////////////////////
// sysName节点的SET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.5;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:OctetString (SIZE (0..255));
// 新的类型定义:ASN_OCTET
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysName_Set(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
snmpIfPF.snmp.set_sysName(vobj->octet.ptr, vobj->octet.len);
return ERRSTAT_NOERROR;
}
////////////////////////////////////////////////////////////////////////////////
// sysLocation节点的GET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.6;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:OctetString (SIZE (0..255));
// 新的类型定义:ASN_OCTET
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysLocation_Get(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
unsigned len;
len = snmpIfPF.snmp.get_sysLocation(globalTextBuffer, SNMP_TEXT_LEN);
return mib_set_string(vobj, globalTextBuffer, len);
}
////////////////////////////////////////////////////////////////////////////////
// sysLocation节点的SET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.6;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:OctetString (SIZE (0..255));
// 新的类型定义:ASN_OCTET
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysLocation_Set(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
snmpIfPF.snmp.set_sysLocation(vobj->octet.ptr, vobj->octet.len);
return ERRSTAT_NOERROR;
}
////////////////////////////////////////////////////////////////////////////////
// sysServices节点的GET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.1.7;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:Integer (0..127);
// 新的类型定义:ASN_INTEGER
////////////////////////////////////////////////////////////////////////////////
snmp_api_t sysServices_Get(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
return mib_set_integer(vobj, snmpIfPF.snmp.get_sysServices());
}
////////////////////////////////////////////////////////////////////////////////
// snmpEnableAuthenTraps节点的GET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.11.30;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:Integer { enabled(1), disabled(2) };
// 新的类型定义:ASN_INTEGER
////////////////////////////////////////////////////////////////////////////////
snmp_api_t snmpEnableAuthenTraps_Get(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
// 注意:vobj指向的变量包含的是缓冲区指针和剩余字节数。
return mib_set_integer(vobj, 2);
}
////////////////////////////////////////////////////////////////////////////////
// snmpEnableAuthenTraps节点的SET方法,Usage是:Object;
// 该节点的完整标识符是:1.3.6.1.2.1.11.30;
// 属于这个模块:RFC1213-MIB; 状态是:Mandatory;
// 原始类型定义:Integer { enabled(1), disabled(2) };
// 新的类型定义:ASN_INTEGER
////////////////////////////////////////////////////////////////////////////////
snmp_api_t snmpEnableAuthenTraps_Set(const mib_leaf_t *leaf, oid_var_t *vname, snmp_var_t *vobj)
{
return ERRSTAT_READONLY;
}
////////////////////////////////////////////////////////////////////////////////
以上代码的函数框架由自己设计的MIB代码生成器生成(函数内容手工添加)。
除了这些MIB叶子节点的读取和写入函数,后台就是查找MIB树,BER编解码的基础功能了,这里只给点思路,具体实现还是建议你用现成的如microchip-snmp这些库。
uip或者lwip这些以太网协议栈就不多说了。 楼上那个应该是net-snmp吧,那个是可以自动生成函数框架的。不过STM32跑这个有点困难 qllaoda1 发表于 2013-8-28 10:49 static/image/common/back.gif
看这个之前你最好先学点SNMP的基础知识,什么叫SNMP ,什么叫MIB之类的。
好的,感谢。 hejiang177 发表于 2013-8-28 09:02 static/image/common/back.gif
建议使用LWIP里的SNMP,不过只支持V1
V1.0就行,这个比较的通用一些。 armstrong 发表于 2013-8-28 10:43 static/image/common/back.gif
你还不如去microchip官网去下载呢,文件很大,263MB呢。
这个包里,什么都有,你去下载看看:
microchip- ...
好,我下载看看。 armstrong 发表于 2013-8-28 10:55 static/image/common/back.gif
我自己实现的代码,作为例子,system子树的MIB代码这样的:
//////////////////////////////////////////// ...
我以前也是CATV的,SNMP自己写,搞到吐血,用LPC的ARM7,TCP用UIP 我有,不过LWIP的SNMP只有V1版 armstrong 发表于 2013-8-27 21:38
楼主是什么行业的呢?我做了多年的嵌入式SNMP了,我是CATV行业的。
不知这位大哥怎么称呼?我也是从事CATV行业,可以互相交流下?更正确的说,是指导下我们这些后辈{:smile:} 关注一下 关注一下 armstrong 发表于 2013-8-28 10:55
我自己实现的代码,作为例子,system子树的MIB代码这样的:
//////////////////////////////////////////// ...
SNMP协议栈都是自己实现的么?每个OID节点都对应两个回调函数,这个可以考虑改进一下。 有w5500+stm32的snmp代码,需要吗? 傻彪5213 发表于 2015-4-2 17:13
有w5500+stm32的snmp代码,需要吗?
可以呀,可以发给我看看吗 ? 东海傲虾 发表于 2015-4-9 09:23
可以呀,可以发给我看看吗 ?
W5500+snmp例程。MCU为STM32F103RCT6,编译环境为Keil4.12.
希望对你有所帮助。 本帖最后由 傻彪5213 于 2015-4-9 11:40 编辑
很简单的,楼主好好研究一下例程吧 傻彪5213 发表于 2015-4-9 09:52
W5500+snmp例程。MCU为STM32F103RCT6,编译环境为Keil4.12.
希望对你有所帮助。
嗯,收到,看了,对我的帮助很大,感谢。 一起学习一下,我也有这样的问题 有问题随时交流。 关注一下 这个协议挺好用的,但是资料很少。 标记下,snmp学习 标记一下,学习收藏 很好,mark一下 mark一下,支持trap吗? armstrong 发表于 2013-8-28 10:43
你还不如去microchip官网去下载呢,文件很大,263MB呢。
这个包里,什么都有,你去下载看看:
microchip- ...
(引用自11楼)
我在官网没找到,能否发下链接?我在搞个SNMPV3用于BMS。
页:
[1]