搜索
bottom↓
回复: 36

求助:stm32+Lwip+snmp,哪位高手有相关的资料或者是例子,.....

[复制链接]

出0入0汤圆

发表于 2013-8-21 17:01:58 | 显示全部楼层 |阅读模式
需要关于stm32+Lwip+snmp的相关资料或者例程,重点是snmp,不是很明白,希望有高手赐教或者是提供参考资料,非常感谢。
不要发Lwip的资料,重点是 “snmp” !!!

出0入0汤圆

 楼主| 发表于 2013-8-21 17:17:46 | 显示全部楼层
以太网芯片暂时用的是 enc28j60,自己顶一下。

出0入0汤圆

 楼主| 发表于 2013-8-22 16:24:44 | 显示全部楼层
没有高手会吗,不用lwip也行,能实现 snmp就行,给点思路或者资料。

出870入263汤圆

发表于 2013-8-27 21:38:38 | 显示全部楼层
楼主是什么行业的呢?我做了多年的嵌入式SNMP了,我是CATV行业的。

出0入0汤圆

 楼主| 发表于 2013-8-28 08:08:27 | 显示全部楼层
armstrong 发表于 2013-8-27 21:38
楼主是什么行业的呢?我做了多年的嵌入式SNMP了,我是CATV行业的。

我就是从事电子设备的开发,最近要在MCU上用到snmp,我不是很懂TCP/IP,能给我一点点资料吗,谢谢了先。

出0入0汤圆

发表于 2013-8-28 08:26:32 | 显示全部楼层
楼主可以搜下net-snmp,这个在linux上实现得比较多,不知道STM32上能不能用

出0入0汤圆

 楼主| 发表于 2013-8-28 08:55:13 | 显示全部楼层
xi_liang 发表于 2013-8-28 08:26
楼主可以搜下net-snmp,这个在linux上实现得比较多,不知道STM32上能不能用

stm32上可以实现,我可以借鉴一下linux的,感谢你。

出0入0汤圆

发表于 2013-8-28 09:02:43 | 显示全部楼层
建议使用LWIP里的SNMP,不过只支持V1

出0入0汤圆

发表于 2013-8-28 09:44:21 | 显示全部楼层
本帖最后由 qllaoda1 于 2013-8-28 09:48 编辑

我在uip和Micorchip的协议栈上都做过SNMP,uip那个只支持到V2C,Microchip那个SNMP挺强的,V3都支持,这个在没有OS支持的协议栈里是很少见的,这个是完全开源的,Micrcohip的使用文档里对使用方法介绍也很详细。

出0入0汤圆

 楼主| 发表于 2013-8-28 10:32:17 | 显示全部楼层
qllaoda1 发表于 2013-8-28 09:44
我在uip和Micorchip的协议栈上都做过SNMP,uip那个只支持到V2C,Microchip那个SNMP挺强的,V3都支持,这个 ...

能否发个资料给我,感谢。

出870入263汤圆

发表于 2013-8-28 10:43:57 | 显示全部楼层
东海傲虾 发表于 2013-8-28 10:32
能否发个资料给我,感谢。

你还不如去microchip官网去下载呢,文件很大,263MB呢。
这个包里,什么都有,你去下载看看:
microchip-application-libraries-v2013-02-15-windows-installer

出0入0汤圆

发表于 2013-8-28 10:49:23 | 显示全部楼层
看这个之前你最好先学点SNMP的基础知识,什么叫SNMP ,什么叫MIB之类的。

出870入263汤圆

发表于 2013-8-28 10:55:17 | 显示全部楼层
我自己实现的代码,作为例子,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这些以太网协议栈就不多说了。

出0入0汤圆

发表于 2013-8-28 10:59:14 | 显示全部楼层
楼上那个应该是net-snmp吧,那个是可以自动生成函数框架的。不过STM32跑这个有点困难

出0入0汤圆

 楼主| 发表于 2013-8-28 11:00:28 | 显示全部楼层
qllaoda1 发表于 2013-8-28 10:49
看这个之前你最好先学点SNMP的基础知识,什么叫SNMP ,什么叫MIB之类的。

好的,感谢。

出0入0汤圆

 楼主| 发表于 2013-8-28 11:02:27 | 显示全部楼层
hejiang177 发表于 2013-8-28 09:02
建议使用LWIP里的SNMP,不过只支持V1

V1.0就行,这个比较的通用一些。

出0入0汤圆

 楼主| 发表于 2013-8-28 11:12:56 | 显示全部楼层
armstrong 发表于 2013-8-28 10:43
你还不如去microchip官网去下载呢,文件很大,263MB呢。
这个包里,什么都有,你去下载看看:
microchip- ...

好,我下载看看。

出0入0汤圆

发表于 2013-11-14 09:24:38 | 显示全部楼层
armstrong 发表于 2013-8-28 10:55
我自己实现的代码,作为例子,system子树的MIB代码这样的:
//////////////////////////////////////////// ...

我以前也是CATV的,SNMP自己写,搞到吐血,用LPC的ARM7,TCP用UIP

出0入0汤圆

发表于 2014-4-15 09:20:18 | 显示全部楼层
我有,不过LWIP的SNMP只有V1版

出0入0汤圆

发表于 2015-3-31 15:29:31 | 显示全部楼层
armstrong 发表于 2013-8-27 21:38
楼主是什么行业的呢?我做了多年的嵌入式SNMP了,我是CATV行业的。

不知这位大哥怎么称呼?我也是从事CATV行业,可以互相交流下?更正确的说,是指导下我们这些后辈

出100入101汤圆

发表于 2015-4-1 19:47:09 来自手机 | 显示全部楼层
关注一下

出100入101汤圆

发表于 2015-4-1 20:23:02 来自手机 | 显示全部楼层
关注一下

出100入101汤圆

发表于 2015-4-1 22:26:04 | 显示全部楼层
armstrong 发表于 2013-8-28 10:55
我自己实现的代码,作为例子,system子树的MIB代码这样的:
//////////////////////////////////////////// ...

SNMP协议栈都是自己实现的么?每个OID节点都对应两个回调函数,这个可以考虑改进一下。

出0入0汤圆

发表于 2015-4-2 17:13:24 | 显示全部楼层
有w5500+stm32的snmp代码,需要吗?

出0入0汤圆

 楼主| 发表于 2015-4-9 09:23:25 | 显示全部楼层
傻彪5213 发表于 2015-4-2 17:13
有w5500+stm32的snmp代码,需要吗?

可以呀,可以发给我看看吗 ?

出0入0汤圆

发表于 2015-4-9 09:52:24 | 显示全部楼层
东海傲虾 发表于 2015-4-9 09:23
可以呀,可以发给我看看吗 ?

W5500+snmp例程。MCU为STM32F103RCT6,编译环境为Keil4.12.
希望对你有所帮助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-4-9 11:36:28 | 显示全部楼层
本帖最后由 傻彪5213 于 2015-4-9 11:40 编辑

很简单的,楼主好好研究一下例程吧

出0入0汤圆

 楼主| 发表于 2015-4-22 10:18:25 | 显示全部楼层
傻彪5213 发表于 2015-4-9 09:52
W5500+snmp例程。MCU为STM32F103RCT6,编译环境为Keil4.12.
希望对你有所帮助。

嗯,收到,看了,对我的帮助很大,感谢。

出0入0汤圆

发表于 2015-4-22 16:26:59 | 显示全部楼层
一起学习一下,我也有这样的问题

出0入0汤圆

 楼主| 发表于 2015-4-22 16:37:12 | 显示全部楼层
有问题随时交流。

出0入0汤圆

发表于 2015-5-18 21:14:07 | 显示全部楼层
关注一下              

出0入0汤圆

 楼主| 发表于 2015-5-27 14:04:44 | 显示全部楼层
这个协议挺好用的,但是资料很少。

出0入0汤圆

发表于 2020-12-28 16:10:55 | 显示全部楼层
标记下,snmp学习

出0入0汤圆

发表于 2021-1-6 12:16:15 来自手机 | 显示全部楼层
标记一下,学习收藏

出0入0汤圆

发表于 2022-2-25 17:17:16 | 显示全部楼层
很好,mark一下

出0入18汤圆

发表于 2022-2-25 17:24:17 | 显示全部楼层
mark一下,支持trap吗?

出50入135汤圆

发表于 2023-10-31 11:57:54 | 显示全部楼层
armstrong 发表于 2013-8-28 10:43
你还不如去microchip官网去下载呢,文件很大,263MB呢。
这个包里,什么都有,你去下载看看:
microchip- ...
(引用自11楼)

我在官网没找到,能否发下链接?我在搞个SNMPV3用于BMS。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 13:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表