东海傲虾 发表于 2013-8-21 17:01:58

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

需要关于stm32+Lwip+snmp的相关资料或者例程,重点是snmp,不是很明白,希望有高手赐教或者是提供参考资料,非常感谢。
不要发Lwip的资料,重点是 “snmp” !!!

东海傲虾 发表于 2013-8-21 17:17:46

以太网芯片暂时用的是 enc28j60,自己顶一下。

东海傲虾 发表于 2013-8-22 16:24:44

没有高手会吗,不用lwip也行,能实现 snmp就行,给点思路或者资料。

armstrong 发表于 2013-8-27 21:38:38

楼主是什么行业的呢?我做了多年的嵌入式SNMP了,我是CATV行业的。

东海傲虾 发表于 2013-8-28 08:08:27

armstrong 发表于 2013-8-27 21:38 static/image/common/back.gif
楼主是什么行业的呢?我做了多年的嵌入式SNMP了,我是CATV行业的。

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

xi_liang 发表于 2013-8-28 08:26:32

楼主可以搜下net-snmp,这个在linux上实现得比较多,不知道STM32上能不能用

东海傲虾 发表于 2013-8-28 08:55:13

xi_liang 发表于 2013-8-28 08:26 static/image/common/back.gif
楼主可以搜下net-snmp,这个在linux上实现得比较多,不知道STM32上能不能用

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

hejiang177 发表于 2013-8-28 09:02:43

建议使用LWIP里的SNMP,不过只支持V1

qllaoda1 发表于 2013-8-28 09:44:21

本帖最后由 qllaoda1 于 2013-8-28 09:48 编辑

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

东海傲虾 发表于 2013-8-28 10:32:17

qllaoda1 发表于 2013-8-28 09:44 static/image/common/back.gif
我在uip和Micorchip的协议栈上都做过SNMP,uip那个只支持到V2C,Microchip那个SNMP挺强的,V3都支持,这个 ...

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

armstrong 发表于 2013-8-28 10:43:57

东海傲虾 发表于 2013-8-28 10:32 static/image/common/back.gif
能否发个资料给我,感谢。

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

qllaoda1 发表于 2013-8-28 10:49:23

看这个之前你最好先学点SNMP的基础知识,什么叫SNMP ,什么叫MIB之类的。

armstrong 发表于 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这些以太网协议栈就不多说了。

qllaoda1 发表于 2013-8-28 10:59:14

楼上那个应该是net-snmp吧,那个是可以自动生成函数框架的。不过STM32跑这个有点困难

东海傲虾 发表于 2013-8-28 11:00:28

qllaoda1 发表于 2013-8-28 10:49 static/image/common/back.gif
看这个之前你最好先学点SNMP的基础知识,什么叫SNMP ,什么叫MIB之类的。

好的,感谢。

东海傲虾 发表于 2013-8-28 11:02:27

hejiang177 发表于 2013-8-28 09:02 static/image/common/back.gif
建议使用LWIP里的SNMP,不过只支持V1

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

东海傲虾 发表于 2013-8-28 11:12:56

armstrong 发表于 2013-8-28 10:43 static/image/common/back.gif
你还不如去microchip官网去下载呢,文件很大,263MB呢。
这个包里,什么都有,你去下载看看:
microchip- ...

好,我下载看看。

wildone 发表于 2013-11-14 09:24:38

armstrong 发表于 2013-8-28 10:55 static/image/common/back.gif
我自己实现的代码,作为例子,system子树的MIB代码这样的:
//////////////////////////////////////////// ...

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

hejiang177 发表于 2014-4-15 09:20:18

我有,不过LWIP的SNMP只有V1版

Albertqin 发表于 2015-3-31 15:29:31

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

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

fengyunyu 发表于 2015-4-1 19:47:09

关注一下

fengyunyu 发表于 2015-4-1 20:23:02

关注一下

fengyunyu 发表于 2015-4-1 22:26:04

armstrong 发表于 2013-8-28 10:55
我自己实现的代码,作为例子,system子树的MIB代码这样的:
//////////////////////////////////////////// ...

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

傻彪5213 发表于 2015-4-2 17:13:24

有w5500+stm32的snmp代码,需要吗?

东海傲虾 发表于 2015-4-9 09:23:25

傻彪5213 发表于 2015-4-2 17:13
有w5500+stm32的snmp代码,需要吗?

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

傻彪5213 发表于 2015-4-9 09:52:24

东海傲虾 发表于 2015-4-9 09:23
可以呀,可以发给我看看吗 ?

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

傻彪5213 发表于 2015-4-9 11:36:28

本帖最后由 傻彪5213 于 2015-4-9 11:40 编辑

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

东海傲虾 发表于 2015-4-22 10:18:25

傻彪5213 发表于 2015-4-9 09:52
W5500+snmp例程。MCU为STM32F103RCT6,编译环境为Keil4.12.
希望对你有所帮助。

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

jie5313 发表于 2015-4-22 16:26:59

一起学习一下,我也有这样的问题

东海傲虾 发表于 2015-4-22 16:37:12

有问题随时交流。

videofun 发表于 2015-5-18 21:14:07

关注一下            

东海傲虾 发表于 2015-5-27 14:04:44

这个协议挺好用的,但是资料很少。

我不乐意啊 发表于 2020-12-28 16:10:55

标记下,snmp学习

lnso 发表于 2021-1-6 12:16:15

标记一下,学习收藏

xy726210 发表于 2022-2-25 17:17:16

很好,mark一下

tang_qianfeng 发表于 2022-2-25 17:24:17

mark一下,支持trap吗?

Stm32Motor 发表于 2023-10-31 11:57:54

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

我在官网没找到,能否发下链接?我在搞个SNMPV3用于BMS。
页: [1]
查看完整版本: 求助:stm32+Lwip+snmp,哪位高手有相关的资料或者是例子,.....