女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第十五章 W55MH32 SNMP示例

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-07-24 10:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網(wǎng)單片機

W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨立的32KB以太網(wǎng)收發(fā)緩存,可供8個獨立硬件socket使用。如此配置,真正實現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。

在封裝規(guī)格上,W55MH32提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復(fù)雜工控場景設(shè)計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復(fù)用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設(shè)資源,能夠輕松應(yīng)對工業(yè)控制中多樣化的連接需求,無論是與各類傳感器、執(zhí)行器的通信,還是對復(fù)雜工業(yè)協(xié)議的支持,都能游刃有余,成為復(fù)雜工控領(lǐng)域的理想選擇。同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網(wǎng)關(guān)模組等場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網(wǎng)站或者私信獲取。

此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。

為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32L這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評估芯片性能。

若您想獲取芯片和開發(fā)板的更多詳細信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZO2iBiBmAe3DyAACpGc5mWX8613.png

第十五章 W55MH32 SNMP示例

本篇文章,我們將詳細介紹如何在W55MH32芯片上面實現(xiàn)SNMP功能。并通過實戰(zhàn)例程,為大家講解如何使用MIB Browser管理W55MH32。

該例程用到的其他網(wǎng)絡(luò)協(xié)議,例如DHCP,請參考相關(guān)章節(jié)。有關(guān)W55MH32的初始化過程,請參考NetworkInstall章節(jié),這里將不再贅述。

1 SNMP協(xié)議簡介

SNMP(Simple Network Management Protocol,簡單網(wǎng)絡(luò)管理協(xié)議)是一種用于管理和監(jiān)控網(wǎng)絡(luò)設(shè)備的協(xié)議。它是應(yīng)用層協(xié)議,廣泛應(yīng)用于網(wǎng)絡(luò)設(shè)備(如路由器、交換機、服務(wù)器、打印機等)的管理和監(jiān)控。SNMP提供了機制以便網(wǎng)絡(luò)管理員可以監(jiān)控網(wǎng)絡(luò)性能、發(fā)現(xiàn)網(wǎng)絡(luò)問題,并對設(shè)備進行管理。

2 SNMP協(xié)議特點

簡單性:設(shè)計輕量,便于實現(xiàn)和部署。

互操作性:提供標準化的設(shè)備管理方式,不同廠商的設(shè)備可以通過SNMP實現(xiàn)互通。

跨平臺支持:SNMP是一種開放的標準協(xié)議,被廣泛應(yīng)用于各種網(wǎng)絡(luò)設(shè)備和操作系統(tǒng)

實時監(jiān)控:支持快速的數(shù)據(jù)采集和報警機制。

擴展性:通過MIB支持不同設(shè)備的特定功能。

源效率:協(xié)議設(shè)計輕量,適合低帶寬和高延遲的網(wǎng)絡(luò)環(huán)境。

3應(yīng)用場景

接下來,我們了解下在W55MH32上,可以使用SNMP協(xié)議完成哪些操作及應(yīng)用呢?

故障報警和日志管理:設(shè)備在檢測到異常或故障時,可以通過 SNMP TRAP將報警信息發(fā)送到網(wǎng)絡(luò)管理系統(tǒng)。

工業(yè)自動化和環(huán)境監(jiān)控:在工業(yè)自動化和環(huán)境監(jiān)控中,W55MH32可通過 SNMP匯報傳感器數(shù)據(jù)。

數(shù)據(jù)中心和機房管理:用于數(shù)據(jù)中心和機房中監(jiān)控服務(wù)器、交換機及其他網(wǎng)絡(luò)設(shè)備的狀態(tài)。

4使用MIB Browser管理W55MH32流程

下載并安裝MIB Browser(鏈接:https://www.ireasoning.com/download/mibfree/setup.exe)

創(chuàng)建分支

打開安裝目錄下 mibs文件夾,找到 RFC1213-MIB文件,右鍵使用記事本打開,上方路徑欄可以尋找路徑。

wKgZPGiBnH6AHRNIAAB1ylJXnac624.png

在snmp后添加一個新分支,命名為User

wKgZO2iBnH6AEPLGAAAzD4BH7bY036.png

添加葉子節(jié)點(功能)

在分支后方繼續(xù)添加功能代碼

wKgZPGiBnH6ARrzrAABn1M1ZbfY698.png

葉子節(jié)點格式如下:

setLED OBJECT-TYPE 添加一個新葉子節(jié)點,命名為 setLED

SYNTAX INTEGER { enabled(1),disabled(0) }設(shè)置數(shù)據(jù)類型

ACCESS read-write設(shè)置讀寫權(quán)限

DESCRIPTION 注釋

::= { User 1 }葉子所在分支,與葉子編號

添加完畢后保存并退出

添加完成后,MIB Browser軟件如下所示:

wKgZPGiBnH6ARrzrAABn1M1ZbfY698.png

代碼適配功能

測試

5 SNMP架構(gòu)組成

SNMP架構(gòu)包括以下三個主要部分:

管理站(Manager):運行SNMP管理軟件,用于發(fā)送請求和接收設(shè)備信息。通過命令操作網(wǎng)絡(luò)設(shè)備,執(zhí)行配置或監(jiān)控任務(wù)。

代理(Agent):安裝在受管理設(shè)備上的軟件,負責將設(shè)備的狀態(tài)信息存儲在MIB中,并響應(yīng)來自管理站的查詢。能動地發(fā)送陷阱(Trap)以報告事件。

管理信息庫(MIB):定義設(shè)備的可管理參數(shù)及其數(shù)據(jù)結(jié)構(gòu)MIB通常以樹狀結(jié)構(gòu)組織,每個節(jié)點代表一個管理對象,具有唯一的對象標識符(OID)。

協(xié)議(SNMP協(xié)議本身):負責管理站和代理之間的通信,支持基本操作如獲取、設(shè)置和通知。

6 OID詳解

簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)的OID(對象標識符)是一個用于唯一標識網(wǎng)絡(luò)設(shè)備上管理信息庫(MIB)中對象的標識符。OID是一種分層的命名方案,允許管理員查詢和設(shè)置網(wǎng)絡(luò)設(shè)備上的各種參數(shù)。

下面是OID的詳解:

OID結(jié)構(gòu)

OID由一系列整數(shù)組成,這些整數(shù)通過點號(.)分隔,形成了一個層次結(jié)構(gòu)。例如:

1.3.6.1.2.1.1.1.0

在這個結(jié)構(gòu)中,每個數(shù)字都代表一個組織或節(jié)點在層次結(jié)構(gòu)中的位置。

OID層次解釋

1:表示ISO(國際標準化組織)

3:表示org(組織)

6:指定IETF(互聯(lián)網(wǎng)工程任務(wù)組)作為組織

1:表示IETF管理的MIB(管理信息庫)

后續(xù)的數(shù)字則進一步定義了特定的MIB模塊、對象類型、實例等信息。

常見的OID前綴

1.3.6.1.2.1:這是最常用的OID前綴,通常簡寫為.iso.org.dod.internet.mgmt.mib-2,它指的是IETF定義的MIB-2。

具體OID示例

1.3.6.1.2.1.1.1.0:這是sysDescr的OID,用于獲取系統(tǒng)描述。

1.3.6.1.2.1.1.2.0:這是sysObjectID的OID,用于獲取系統(tǒng)對象標識符。

1.3.6.1.2.1.1.3.0:這是sysUpTime的OID,用于獲取系統(tǒng)正常運行時間。

如何使用OID

查詢:使用SNMPGET請求,可以查詢特定OID的值。

設(shè)置:使用SNMPSET請求,可以修改特定OID的值(需要設(shè)備支持)。

遍歷:使用SNMPWALK請求,可以遍歷一個OID下的所有子節(jié)點。

注意事項

OID的具體值和結(jié)構(gòu)可能會隨著網(wǎng)絡(luò)設(shè)備的不同而有所不同。在使用OID之前,最好查閱相應(yīng)設(shè)備的MIB文檔,以了解其支持的具體OID及其功能。OID是SNMP管理中不可或缺的部分,通過OID,網(wǎng)絡(luò)管理員可以進行監(jiān)控網(wǎng)絡(luò)狀態(tài)、配置網(wǎng)絡(luò)設(shè)備、接收警報通知等操作。理解和掌握OID對于網(wǎng)絡(luò)管理和故障排除非常重要。

7 SNMP報文格式

SNMP報文基于ASN.1(Abstract Syntax Notation One)編碼規(guī)則,通常使用BER(Basic Encoding Rules)進行傳輸。以下是SNMP報文的基本格式和關(guān)鍵字段,本例程中使用的是SNMPv1版本,以下對SNMPv1進行講解,而對于其他版本的報文格式,由于篇幅有限,這里將不再進行講解,感興趣的朋友可自行查閱資料進行學(xué)習(xí)。

SNMP報文結(jié)構(gòu)

字段名稱 類型 描述
Message 序列(Sequence) 整個 SNMP消息的容器,包含以下字段。
Version 整數(shù)(Integer) SNMP協(xié)議版本號,0表示 SNMPv1。
Community 字符串(Octet String) 社區(qū)字符串,用于身份驗證,如 public或 private。
PDU類型 標記(Tag, Context-Specific) 表示操作類型,如:GET(0xA0)、GET-NEXT(0xA1)、SET(0xA3)、TRAP(0xA4)。
Request ID 整數(shù)(Integer) 請求的唯一標識,用于匹配請求和響應(yīng)。
Error Status 整數(shù)(Integer) 錯誤狀態(tài),取值范圍為:0(noError)、1(tooBig)、2(noSuchName)等。
Error Index 整數(shù)(Integer) 錯誤索引,指示變量綁定列表中出錯的變量位置(從 1開始計數(shù))。
Variable Bindings 序列(Sequence of VarBinds) 變量綁定列表,每個綁定包含一個 OID和對應(yīng)的值。
- OID 對象標識符(OID) 被管理對象的標識符,如 1.3.6.1.2.1.1.1.0表示系統(tǒng)描述(sysDescr)。
- Value 可變類型(Null, Integer, String等) OID對應(yīng)的值,可能為空值(GET請求)或具體數(shù)據(jù)(響應(yīng)或 SET請求)。

報文字段詳解

1. Message(消息整體)

這是 SNMP消息的最外層結(jié)構(gòu),是一個序列(Sequence),包含以下三個部分:

Version(版本號)
此字段定義 SNMP協(xié)議的版本號,用一個整數(shù)表示:

0表示 SNMPv1。

1表示 SNMPv2c。

3表示 SNMPv3。
該字段是解析報文的基礎(chǔ),不同版本的報文格式存在差異。

Community(社區(qū)字符串)
社區(qū)字符串是 SNMPv1和 SNMPv2c的一種簡單身份驗證機制,用于限制對管理對象的訪問權(quán)限。它是一個字符串(Octet String),常見的值包括:

public:表示只讀訪問權(quán)限。

private:表示讀寫訪問權(quán)限。

PDU(協(xié)議數(shù)據(jù)單元)類型
PDU定義了操作類型,通過一個標記值(Tag, Context-Specific)來區(qū)分:

0xA0:GET請求,用于獲取管理對象的值。

0xA1:GET-NEXT請求,用于獲取下一個對象的值。

0xA3:SET請求,用于設(shè)置管理對象的值。

0xA4:TRAP,用于代理向管理站報告事件。

2. Request ID(請求 ID)

請求 ID是一個整數(shù),用于唯一標識一個請求。它由發(fā)起方生成,并在響應(yīng)中攜帶相同的 ID。通過此字段,接收方可以將響應(yīng)與對應(yīng)的請求進行匹配。如果響應(yīng)中的請求 ID不一致,則表明響應(yīng)與請求無關(guān)。

3. Error Status(錯誤狀態(tài))

此字段用整數(shù)表示請求的執(zhí)行狀態(tài):

0:noError,表示請求執(zhí)行成功,沒有錯誤。

1:tooBig,請求的響應(yīng)數(shù)據(jù)超出接收方的最大允許大小。

2:noSuchName,請求中指定的 OID不存在。

3:badValue,請求中的值非法或不支持。

4:readOnly,請求試圖修改只讀對象。

5:genErr,發(fā)生了通用錯誤,具體原因未明確。

4. Error Index(錯誤索引)

如果 Error Status的值不為 0,此字段指示變量綁定列表中出錯的變量位置(從 1開始計數(shù))。如果沒有錯誤,此字段的值為 0。

5. Variable Bindings(變量綁定列表)

變量綁定列表是 SNMP報文的核心部分,包含一個或多個變量綁定(VarBind)。每個變量綁定由以下兩部分組成:

OID(對象標識符)
OID是管理對象的唯一標識符,用點分十進制表示。例如:

1.3.6.1.2.1.1.1.0:表示 sysDescr,系統(tǒng)描述。

1.3.6.1.2.1.1.5.0:表示 sysName,系統(tǒng)名稱。

Value(值)
OID的值根據(jù)請求類型不同可能為以下幾種:

在 GET請求中,值通常為空(Null)。

在 GET-RESPONSE報文中,值為具體數(shù)據(jù),例如整型(Integer32)、字符串(Octet String)等。

在 SET請求中,值是要設(shè)置的新值。

SNMP報文解析

MIB Browser向W55MH32發(fā)送LED設(shè)置報文:

|報文解析|
Simple Network Management Protocol (簡單網(wǎng)絡(luò)管理協(xié)議(SNMP報文))
   version: version-1 (0) (使用的 SNMP協(xié)議版本,值為 0表示 SNMPv1)
   community: public (社區(qū)字符串為 "public",通常表示只讀權(quán)限)
   data: set-request (3) (PDU 類型為 SET-REQUEST,表示設(shè)置管理對象的值)
       set-request
           request-id: 1479407980 (請求的唯一標識符,用于匹配請求和響應(yīng))
           error-status: noError (0) (錯誤狀態(tài)為 noError (0),表示沒有錯誤發(fā)生)
           error-index: 0 (錯誤索引為 0,表示變量綁定列表中沒有錯誤對象)
           variable-bindings: 1 item (變量綁定列表中包含 1個變量)
                1.3.6.1.2.1.12.1.0: 1 (OID為 1.3.6.1.2.1.12.1.0,設(shè)置的值為 1)
                    Object Name: 1.3.6.1.2.1.12.1.0 (iso.3.6.1.2.1.12.1.0) (OID 對應(yīng)的完整名稱)
                    Value (Integer32): 1 (設(shè)置的值為整數(shù)類型,值為 1)
   [Response In: 237] (表示該請求的響應(yīng)報文序號為 237)

|報文原文|
30 2a 02 01 00 04 06 70 75 62 6c 69 63 a3 1d 02 04 58 2d f9 6c 02 01 00 02 01 00 30 0f 30 0d 06 08 2b 06 01 02 01 0c 01 00 02 01 01

W55MH32響應(yīng)報文:

|報文解析|
Simple Network Management Protocol
   version: version-1 (0) (版本號:SNMPv1(值為 0))
   community: public (社區(qū)字符串:"public",用于身份驗證)
   data: get-response (2) (數(shù)據(jù)類型:GET-RESPONSE(值為 2),表示這是一個響應(yīng)報文)
       get-response (GET-RESPONSE 數(shù)據(jù)部分)
           request-id: 1479407980 (請求 ID:1479407980,用于匹配請求和響應(yīng))
           error-status: noError (0) (錯誤狀態(tài):noError(值為 0),表示沒有錯誤)
           error-index: 0 (錯誤索引:0,表示沒有發(fā)生錯誤的變量索引)
           variable-bindings: 1 item (變量綁定:包含 1個變量)
                1.3.6.1.2.1.12.1.0: 1 (變量綁定內(nèi)容)
                    Object Name: 1.3.6.1.2.1.12.1.0 (iso.3.6.1.2.1.12.1.0) (對象標識符(OID))
                    Value (Integer32): 1 (OID對應(yīng)的值,類型為 Integer32,值為 1)
   [Response To: 236] (對請求 ID 236的響應(yīng))
   [Time: 0.023844000 seconds] 響應(yīng)耗時:0.023844秒)

|報文原文|
30 2a 02 01 00 04 06 70 75 62 6c 69 63 a2 1d 02 04 58 2d f9 6c 02 01 00 02 01 00 30 0f 30 0d 06 08 2b 06 01 02 01 0c 01 00 02 01 01

8實現(xiàn)過程

接下來,我們看看如何在代碼上適配MIB Browser上添加的功能。

注意:測試實例需要PC端和W55MH32處于同一網(wǎng)段。

步驟1:初始化LED并注冊到SNMP中

user_led_init();
user_led_control_init(get_user_led_status, set_user_led_status);

步驟2:注冊snmp定時器

/**
 * @brief  1ms timer IRQ Handler
 * @param  none
 * @return none
 */
void TIM3_IRQHandler(void)
{
    static uint32_t tim3_1ms_count = 0;
    static uint8_t tim3_10ms_count = 0;

    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
    {
        tim3_1ms_count++;
        tim3_10ms_count++;

        // 1000ms(1秒)定時處理DHCP
        if (tim3_1ms_count >= 1000)
        {
            DHCP_time_handler();
            tim3_1ms_count = 0;
        }

        // 10ms定時處理SNMP
        if (tim3_10ms_count >= 10)
        {
            SNMP_time_handler();
            tim3_10ms_count = 0;
        }

        // 清除中斷標志位
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
    }
}

我們需要10ms調(diào)用一次SNMP_time_handler()函數(shù),方便SNMP進行超時處理。

步驟3:添加功能函數(shù)

在snmp_custom.c文件中的snmpData結(jié)構(gòu)體變量中,添加功能函數(shù):

c

運行

dataEntryType snmpData[] =
{
    // System MIB
    // SysDescr Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 1, 0}, SNMPDTYPE_OCTET_STRING,  30, {"WIZnet Embedded SNMP Agent"}, NULL, NULL},

    // SysObjectID Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 2, 0}, SNMPDTYPE_OBJ_ID,   8, {"x2bx06x01x02x01x01x02x00"}, NULL, NULL},

    // SysUptime Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 3, 0}, SNMPDTYPE_TIME_TICKS,   0, {""}, currentUptime, NULL},

    // sysContact Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 4, 0}, SNMPDTYPE_OCTET_STRING,  30, {"http://www.wizwiki.net/forum"}, NULL, NULL},

    // sysName Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 5, 0}, SNMPDTYPE_OCTET_STRING,  30, {"http://www.wiznet.co.kr"}, NULL, NULL},

    // Location Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 6, 0}, SNMPDTYPE_OCTET_STRING,  30, {"4F Humax Village"}, NULL, NULL},

    // SysServices
    {  8, {0x2b, 6, 1, 2, 1, 1, 7, 0}, SNMPDTYPE_INTEGER,   4, {""}, NULL, NULL},

    {  8, {0x2b, 6, 1, 2, 1, 12, 2, 0}, SNMPDTYPE_OCTET_STRING,  30, {""}, get_LEDStatus_UserLED, NULL},

    {  8, {0x2b, 6, 1, 2, 1, 12, 1, 0}, SNMPDTYPE_INTEGER,   4, {""}, NULL, set_LEDStatus_UserLED},

    // OID Test #1 (long-length OID example, 19865)
    {0x0a, {0x2b, 0x06, 0x01, 0x04, 0x01, 0x81, 0x9b, 0x19, 0x01, 0x00}, SNMPDTYPE_OCTET_STRING,  30, {"long-length OID Test #1"}, NULL, NULL},

    // OID Test #2 (long-length OID example, 22210)
    {0x0a, {0x2b, 0x06, 0x01, 0x04, 0x01, 0x81, 0xad, 0x42, 0x01, 0x00}, SNMPDTYPE_OCTET_STRING,  35, {"long-length OID Test #2"}, NULL, NULL},

    // OID Test #2: SysObjectID Entry
    {0x0a, {0x2b, 0x06, 0x01, 0x04, 0x01, 0x81, 0xad, 0x42, 0x02, 0x00}, SNMPDTYPE_OBJ_ID, 0x0a, {"x2bx06x01x04x01x81xadx42x02x00"}, NULL, NULL},
};

結(jié)構(gòu)體變量snmpData的結(jié)構(gòu)體dataEntryType定義如下所示:

typedef struct {
    uint8_t oidlen;                  // OID長度
    uint8_t oid[MAX_OID];            // OID數(shù)組(對象標識符)
    uint8_t dataType;                // 數(shù)據(jù)類型(對應(yīng)SNMP數(shù)據(jù)類型)
    uint8_t dataLen;                 // 數(shù)據(jù)長度
    union {
        uint8_t octetstring[MAX_STRING];  // 字符串類型數(shù)據(jù)
        uint32_t intval;                  // 整數(shù)類型數(shù)據(jù)
    } u;                             // 數(shù)據(jù)聯(lián)合體(存儲不同類型的數(shù)據(jù))
    void (*getfunction)(void *, uint8_t *);  // 獲取數(shù)據(jù)的回調(diào)函數(shù)
    void (*setfunction)(int32_t);            // 設(shè)置數(shù)據(jù)的回調(diào)函數(shù)
} dataEntryType;

步驟4:初始化snmp協(xié)議

void snmpd_init(uint8_t *managerIP, uint8_t *agentIP, uint8_t sn_agent, uint8_t sn_trap)
{
#ifdef _SNMP_DEBUG_
    printf("rn - SNMP : Start SNMP Agent Daemonrn");
#endif

    SOCK_SNMP_AGENT = sn_agent;
    SOCK_SNMP_TRAP = sn_trap;

    // 檢查 socket 編號是否合法
    if ((SOCK_SNMP_AGENT > _WIZCHIP_SOCK_NUM_) || (SOCK_SNMP_TRAP > _WIZCHIP_SOCK_NUM_))
    {
        return;
    }

    startTime = getSNMPTimeTick();  // 記錄啟動時間(單位:10ms)
    initTable();                    // 初始化 OID 條目值

    initial_Trap(managerIP, agentIP);  // 初始化 Trap 相關(guān)配置

    /*
    // SNMP Trap 示例代碼
    {
        dataEntryType enterprise_oid = {
            0x0a, 
            {0x2b, 0x06, 0x01, 0x04, 0x01, 0x81, 0x9b, 0x19, 0x01, 0x00},
            SNMPDTYPE_OBJ_ID, 
            0x0a, 
            {"x2bx06x01x04x01x81x9bx19x10x00"},
            NULL, 
            NULL
        };

        dataEntryType trap_oid1 = {
            8, 
            {0x2b, 6, 1, 4, 1, 0, 11, 0}, 
            SNMPDTYPE_OCTET_STRING, 
            30, 
            {""}, 
            NULL, 
            NULL
        };

        dataEntryType trap_oid2 = {
            8, 
            {0x2b, 6, 1, 4, 1, 0, 12, 0}, 
            SNMPDTYPE_INTEGER, 
            4, 
            {""}, 
            NULL, 
            NULL
        };

        strcpy((char *)trap_oid1.u.octetstring, "Alert!!!");   // 添加字符串數(shù)據(jù)
        trap_oid2.u.intval = 123456;  // 添加整數(shù)值

        // 通用 Trap: warmStart
        snmp_sendTrap((void *)"192.168.0.214", (void *)"192.168.0.112", (void *)"public", 
                      enterprise_oid, SNMPTRAP_WARMSTART, 0, 0);

        // 企業(yè)特定 Trap
        snmp_sendTrap((void *)"192.168.0.214", (void *)"192.168.0.112", (void *)"public", 
                      enterprise_oid, 6, 0, 2, &trap_oid1, &trap_oid2);
    }
    */
}

這一步,主要是將使用的socket號,管理IP地址,請求IP地址等參數(shù)注冊進去,并且記錄開始時間。如果想使用Trap主動上報,可以參考注釋中的示例代碼。

步驟5:在主循環(huán)中運行snmpd_run()函數(shù)

snmpdrun()函數(shù)代碼如下:

int32_t snmpd_run(void)
{
    int32_t ret;
    int32_t len = 0;

    uint8_t svr_addr[6];
    uint16_t svr_port;

    // 檢查 socket 編號合法性
    if (SOCK_SNMP_AGENT > _WIZCHIP_SOCK_NUM_)
    {
        return -99;
    }

    // 根據(jù) socket 狀態(tài)進行處理
    switch (getSn_SR(SOCK_SNMP_AGENT))
    {
        case SOCK_UDP:
            // 檢查接收緩沖區(qū)是否有數(shù)據(jù)
            if ((len = getSn_RX_RSR(SOCK_SNMP_AGENT)) > 0)
            {
                // 接收 UDP 數(shù)據(jù)
                request_msg.len = recvfrom(SOCK_SNMP_AGENT, request_msg.buffer, len, svr_addr, &svr_port);
            }
            else
            {
                request_msg.len = 0;
            }

            // 處理接收到的請求數(shù)據(jù)
            if (request_msg.len > 0)
            {
#ifdef _SNMP_DEBUG_
                dumpCode((void *)"rn[Request]rn", (void *)"rn", request_msg.buffer, request_msg.len);
#endif
                // 初始化請求和響應(yīng)消息
                request_msg.index = 0;
                response_msg.index = 0;
                errorStatus = errorIndex = 0;
                memset(response_msg.buffer, 0x00, MAX_SNMPMSG_LEN);

                // 解析 SNMP 請求并發(fā)送響應(yīng)
                if (parseSNMPMessage() != -1)
                {
                    sendto(SOCK_SNMP_AGENT, response_msg.buffer, response_msg.index, svr_addr, svr_port);
                }

#ifdef _SNMP_DEBUG_
                dumpCode((void *)"rn[Response]rn", (void *)"rn", response_msg.buffer, response_msg.index);
#endif
            }
            break;

        case SOCK_CLOSED:
            // 創(chuàng)建 UDP  socket
            if ((ret = socket(SOCK_SNMP_AGENT, Sn_MR_UDP, PORT_SNMP_AGENT, 0x00)) != SOCK_SNMP_AGENT)
            {
                return ret;
            }
#ifdef _SNMP_DEBUG_
            printf(" - [%d] UDP Socket for SNMP Agent, port [%d]rn", SOCK_SNMP_AGENT, PORT_SNMP_AGENT);
#endif
            break;

        default:
            break;
    }

    return 1;
}

snmpd_run()函數(shù)會執(zhí)行一個UDP狀態(tài)機,當收到SNMP管理的消息后會執(zhí)行解析以及回復(fù)操作。

9運行結(jié)果

燒錄例程運行后,首先可以看到打印了PHY鏈路檢測和DHCP獲取網(wǎng)絡(luò)信息,然后是運行SNMP程序:

wKgZPGiBnH-Af8ufAABkTNVbjiY519.png

打開MIB Borwser,輸入W55MH32的地址,然后依次點擊system分支下的各個節(jié)點,獲取到的結(jié)果與代碼定義相同:

wKgZPGiBnH-AVFmeAAC0J56B1B4923.png

再找到User分支下的setLED指令,右鍵指令,點擊set,類型選擇integer,Value填 1,點擊OK:

wKgZPGiBnH-AA8B6AACKGaCTpEo008.png

getLED指令,右鍵指令,點擊get,即可讀出LED狀態(tài):

wKgZO2iBnH-AST2cAACwLfob3AQ849.png

10總結(jié)

本文講解了如何在 W55MH32芯片上實現(xiàn) SNMP功能,通過實戰(zhàn)例程展示了使用 MIB Browser管理 W55MH32的具體過程,涵蓋在 MIB Browser中創(chuàng)建分支、添加葉子節(jié)點,以及在代碼中適配功能等關(guān)鍵步驟。文章詳細介紹了 SNMP協(xié)議的概念、特點、應(yīng)用場景、架構(gòu)組成、OID詳解和報文格式,幫助讀者理解其在網(wǎng)絡(luò)設(shè)備管理和監(jiān)控中的重要作用。

下一篇文章將聚焦 PING命令,解析其測試網(wǎng)絡(luò)連通性的原理及在網(wǎng)絡(luò)故障排查中的應(yīng)用,同時講解如何在W55MH32上使用 PING命令進行網(wǎng)絡(luò)診斷,敬請期待!

WIZnet是一家無晶圓廠半導(dǎo)體公司,成立于 1998年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP卸載引擎)技術(shù),基于獨特的專利全硬連線 TCP/IP。iMCU?面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。

WIZnet在全球擁有 70多家分銷商,在香港、韓國、美國設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營銷。

香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    41

    文章

    5682

    瀏覽量

    176226
  • SNMP
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    30311
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    第十五章 DAC (上篇)

    文章介紹了基于W55MH32的DAC(數(shù)字/模擬轉(zhuǎn)換器)上篇內(nèi)容,其為12位轉(zhuǎn)換器,有2通道,支持8/12位模式、DMA等,具噪聲和三角波生成等功能,還介紹了DAC_OutAudio例程的配置與驗證。
    的頭像 發(fā)表于 05-28 15:07 ?546次閱讀
    <b class='flag-5'>第十五章</b> DAC (上篇)

    第十五章 DAC (下篇)

    本篇文章為第十五章DAC(下篇),介紹三個例程:DAC_OutDMASineWave用DMA輸出正弦波,DAC_OutNoiseWave輸出噪聲波,DAC_OutTriangleWave生成三角波,均有初始化、波形配置及串口調(diào)試功能。
    的頭像 發(fā)表于 05-28 15:39 ?556次閱讀
    <b class='flag-5'>第十五章</b> DAC (下篇)

    【正點原子FPGA連載】第十五章 窗口門狗(WWDG)實驗 -摘自【正點原子】新起點之FPGA開發(fā)指南_V2.1

    【正點原子FPGA連載】第十五章 窗口門狗(WWDG)實驗 -摘自【正點原子】新起點之FPGA開發(fā)指南_V2.1
    發(fā)表于 12-05 11:21 ?12次下載
    【正點原子FPGA連載】<b class='flag-5'>第十五章</b> 窗口門狗(WWDG)實驗 -摘自【正點原子】新起點之FPGA開發(fā)指南_V2.1

    第二 W55MH32 DHCP示例

    本文介紹 DHCP?協(xié)議,包括其在 IP?網(wǎng)絡(luò)自動分配參數(shù)的功能、便捷配置等特點、工作原理、報文格式和應(yīng)用場景。通過 W55MH32?實戰(zhàn)例程展示動態(tài)獲取網(wǎng)絡(luò)地址信息過程,含注冊定時器中斷、啟用模式和獲取信息等步驟,燒錄后可完成檢測與信息打印,PC?端能 PING?通設(shè)備。
    的頭像 發(fā)表于 07-24 09:02 ?143次閱讀
    第二<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> DHCP<b class='flag-5'>示例</b>

    第五 W55MH32 UDP示例

    本文介紹了在 W55MH32?芯片上實現(xiàn) UDP?通信及數(shù)據(jù)回環(huán)測試的方法。闡述了 UDP?協(xié)議的概念、特點、應(yīng)用場景、報文傳輸流程和報文結(jié)構(gòu),展示了實現(xiàn)過程,借助網(wǎng)絡(luò)調(diào)試工具完成測試。
    的頭像 發(fā)表于 07-24 09:13 ?72次閱讀
    第五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP<b class='flag-5'>示例</b>

    第九 W55MH32 HTTP Server示例

    本文介紹了在 W55MH32?芯片上實現(xiàn) HTTP Server?功能,并通過瀏覽器修改其網(wǎng)絡(luò)地址信息的方法。闡述了 HTTP?協(xié)議的概念、特點、應(yīng)用場景、工作流程、請求方法、響應(yīng)內(nèi)容,以及 Web?頁面構(gòu)成和交互方式。展示了在W55MH32上實現(xiàn)的過程。
    的頭像 發(fā)表于 07-24 09:35 ?113次閱讀
    第九<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP Server<b class='flag-5'>示例</b>

    第十章 W55MH32 SNTP示例

    本文講解了如何在W55MH32芯片上實現(xiàn)SNTP授時功能,通過實例詳細展示了從SNTP服務(wù)器同步時間的實現(xiàn)流程,包括時間請求、響應(yīng)解析和本地時間校準等核心步驟。文章還對SNTP的應(yīng)用場景進行了分析,幫助讀者理解其在時間同步中的實際應(yīng)用價值。
    的頭像 發(fā)表于 07-24 09:43 ?131次閱讀
    <b class='flag-5'>第十章</b> <b class='flag-5'>W55MH32</b> SNTP<b class='flag-5'>示例</b>

    第十一章 W55MH32 SMTP示例

    本文講解了如何在 W55MH32?芯片上實現(xiàn) SMTP?協(xié)議,通過實例詳細展示了在該芯片上使用 SMTP?協(xié)議發(fā)送電子郵件的實現(xiàn)流程,包括 SMTP?發(fā)送內(nèi)容初始化、使用 DNS?協(xié)議解析 SMTP
    的頭像 發(fā)表于 07-24 09:49 ?120次閱讀
    <b class='flag-5'>第十</b>一章 <b class='flag-5'>W55MH32</b> SMTP<b class='flag-5'>示例</b>

    第十二章 W55MH32 NetBIOS示例

    本文講解了如何在 W55MH32?芯片上實現(xiàn) NetBIOS?功能,通過實戰(zhàn)例程展示了利用 NetBIOS?進行名稱 PING?測試的具體過程,包括 NetBIOS?功能的調(diào)用、請求處理、名稱解析
    的頭像 發(fā)表于 07-24 09:58 ?121次閱讀
    <b class='flag-5'>第十二章</b> <b class='flag-5'>W55MH32</b> NetBIOS<b class='flag-5'>示例</b>

    第十四章 W55MH32 TFTP示例

    本文講解了如何在 W55MH32?芯片上實現(xiàn) TFTP?協(xié)議,通過實戰(zhàn)例程詳細展示了使用 TFTP?客戶端模式從服務(wù)器獲取文本文件的過程,涵蓋 TFTP?初始化、發(fā)送讀請求、運行協(xié)議并處理結(jié)果等核心
    的頭像 發(fā)表于 07-24 10:37 ?129次閱讀
    <b class='flag-5'>第十</b>四章 <b class='flag-5'>W55MH32</b> TFTP<b class='flag-5'>示例</b>

    第十六章 W55MH32 PING示例

    本文講解了如何在 W55MH32?芯片上通過 IPRAW?模式實現(xiàn) ICMP?協(xié)議中的 PING?命令,以進行網(wǎng)絡(luò)連通性測試,通過實戰(zhàn)例程展示了從發(fā)送 PING?請求、接收并解析回復(fù)到統(tǒng)計結(jié)果的完整
    的頭像 發(fā)表于 07-24 11:41 ?48次閱讀
    <b class='flag-5'>第十</b>六章 <b class='flag-5'>W55MH32</b> PING<b class='flag-5'>示例</b>

    第十七章 W55MH32 ARP示例

    文講解了如何在 W55MH32?芯片上通過 MAC RAW?模式實現(xiàn) ARP?協(xié)議,將 IP?地址解析為 MAC?地址,通過實戰(zhàn)例程展示了從發(fā)送 ARP?請求到接收并處理響應(yīng)的完整過程。文章詳細介紹
    的頭像 發(fā)表于 07-24 11:49 ?144次閱讀
    <b class='flag-5'>第十七章</b> <b class='flag-5'>W55MH32</b> ARP<b class='flag-5'>示例</b>

    第十八章 W55MH32 FTP_Server示例

    本文講解了如何在 W55MH32?芯片上實現(xiàn) FTP?協(xié)議的服務(wù)器模式,通過實戰(zhàn)例程展示了使用 W55MH32?作為 FTP?服務(wù)器與 PC?端進行文件傳輸、目錄操作等功能的過程,涵蓋獲取網(wǎng)絡(luò)配置
    的頭像 發(fā)表于 07-24 11:55 ?35次閱讀
    <b class='flag-5'>第十</b>八章 <b class='flag-5'>W55MH32</b> FTP_Server<b class='flag-5'>示例</b>

    第二十五章 W55MH32 TCP_Server_Multi_Socket示例

    本文講解了如何在 W55MH32?芯片上使用 8?個 socket?實現(xiàn) TCP?服務(wù)器模式,讓多個客戶端連接進行數(shù)據(jù)回環(huán)測試,通過實戰(zhàn)例程展示了從初始化 socket?到監(jiān)聽端口、處理客戶端連接
    的頭像 發(fā)表于 07-24 16:10 ?83次閱讀
    第二<b class='flag-5'>十五章</b> <b class='flag-5'>W55MH32</b> TCP_Server_Multi_Socket<b class='flag-5'>示例</b>

    第二十六章 W55MH32?上位機搜索和配置示例

    本文講解了如何在 W55MH32?芯片上實現(xiàn)上位機搜索和配置功能,通過實戰(zhàn)例程展示了使用開源上位機配置工具 SmartConfigTool?搜索局域網(wǎng)中的 W55MH32?并進行網(wǎng)絡(luò)地址配置的過程
    的頭像 發(fā)表于 07-24 16:13 ?79次閱讀
    第二十六章 <b class='flag-5'>W55MH32</b>?上位機搜索和配置<b class='flag-5'>示例</b>