国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

第十五章 W55MH32 SNMP示例

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網絡通信安全再添保障。

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

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

wKgZO2iBiBmAe3DyAACpGc5mWX8613.png

第十五章 W55MH32 SNMP示例

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

該例程用到的其他網絡協議,例如DHCP,請參考相關章節。有關W55MH32的初始化過程,請參考NetworkInstall章節,這里將不再贅述。

1 SNMP協議簡介

SNMP(Simple Network Management Protocol,簡單網絡管理協議)是一種用于管理和監控網絡設備的協議。它是應用層協議,廣泛應用于網絡設備(如路由器、交換機、服務器、打印機等)的管理和監控。SNMP提供了機制以便網絡管理員可以監控網絡性能、發現網絡問題,并對設備進行管理。

2 SNMP協議特點

簡單性:設計輕量,便于實現和部署。

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

跨平臺支持:SNMP是一種開放的標準協議,被廣泛應用于各種網絡設備和操作系統。

實時監控:支持快速的數據采集和報警機制。

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

源效率:協議設計輕量,適合低帶寬和高延遲的網絡環境。

3應用場景

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

故障報警和日志管理:設備在檢測到異?;蚬收蠒r,可以通過 SNMP TRAP將報警信息發送到網絡管理系統。

工業自動化和環境監控:在工業自動化和環境監控中,W55MH32可通過 SNMP匯報傳感器數據。

數據中心和機房管理:用于數據中心和機房中監控服務器、交換機及其他網絡設備的狀態。

4使用MIB Browser管理W55MH32流程

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

創建分支

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

wKgZPGiBnH6AHRNIAAB1ylJXnac624.png

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

wKgZO2iBnH6AEPLGAAAzD4BH7bY036.png

添加葉子節點(功能)

在分支后方繼續添加功能代碼

wKgZPGiBnH6ARrzrAABn1M1ZbfY698.png

葉子節點格式如下:

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

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

ACCESS read-write設置讀寫權限

DESCRIPTION 注釋

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

添加完畢后保存并退出

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

wKgZPGiBnH6ARrzrAABn1M1ZbfY698.png

代碼適配功能

測試

5 SNMP架構組成

SNMP架構包括以下三個主要部分:

管理站(Manager):運行SNMP管理軟件,用于發送請求和接收設備信息。通過命令操作網絡設備,執行配置或監控任務。

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

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

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

6 OID詳解

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

下面是OID的詳解:

OID結構

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

1.3.6.1.2.1.1.1.0

在這個結構中,每個數字都代表一個組織或節點在層次結構中的位置。

OID層次解釋

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

3:表示org(組織)

6:指定IETF(互聯網工程任務組)作為組織

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

后續的數字則進一步定義了特定的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,用于獲取系統描述。

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

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

如何使用OID

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

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

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

注意事項

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

7 SNMP報文格式

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

SNMP報文結構

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

報文字段詳解

1. Message(消息整體)

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

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

0表示 SNMPv1。

1表示 SNMPv2c。

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

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

public:表示只讀訪問權限。

private:表示讀寫訪問權限。

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

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

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

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

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

2. Request ID(請求 ID)

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

3. Error Status(錯誤狀態)

此字段用整數表示請求的執行狀態:

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

1:tooBig,請求的響應數據超出接收方的最大允許大小。

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

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

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

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

4. Error Index(錯誤索引)

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

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

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

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

1.3.6.1.2.1.1.1.0:表示 sysDescr,系統描述。

1.3.6.1.2.1.1.5.0:表示 sysName,系統名稱。

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

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

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

在 SET請求中,值是要設置的新值。

SNMP報文解析

MIB Browser向W55MH32發送LED設置報文:

|報文解析|
Simple Network Management Protocol (簡單網絡管理協議(SNMP報文))
   version: version-1 (0) (使用的 SNMP協議版本,值為 0表示 SNMPv1)
   community: public (社區字符串為 "public",通常表示只讀權限)
   data: set-request (3) (PDU 類型為 SET-REQUEST,表示設置管理對象的值)
       set-request
           request-id: 1479407980 (請求的唯一標識符,用于匹配請求和響應)
           error-status: noError (0) (錯誤狀態為 noError (0),表示沒有錯誤發生)
           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,設置的值為 1)
                    Object Name: 1.3.6.1.2.1.12.1.0 (iso.3.6.1.2.1.12.1.0) (OID 對應的完整名稱)
                    Value (Integer32): 1 (設置的值為整數類型,值為 1)
   [Response In: 237] (表示該請求的響應報文序號為 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響應報文:

|報文解析|
Simple Network Management Protocol
   version: version-1 (0) (版本號:SNMPv1(值為 0))
   community: public (社區字符串:"public",用于身份驗證)
   data: get-response (2) (數據類型:GET-RESPONSE(值為 2),表示這是一個響應報文)
       get-response (GET-RESPONSE 數據部分)
           request-id: 1479407980 (請求 ID:1479407980,用于匹配請求和響應)
           error-status: noError (0) (錯誤狀態:noError(值為 0),表示沒有錯誤)
           error-index: 0 (錯誤索引:0,表示沒有發生錯誤的變量索引)
           variable-bindings: 1 item (變量綁定:包含 1個變量)
                1.3.6.1.2.1.12.1.0: 1 (變量綁定內容)
                    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對應的值,類型為 Integer32,值為 1)
   [Response To: 236] (對請求 ID 236的響應)
   [Time: 0.023844000 seconds] 響應耗時: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實現過程

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

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

步驟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調用一次SNMP_time_handler()函數,方便SNMP進行超時處理。

步驟3:添加功能函數

在snmp_custom.c文件中的snmpData結構體變量中,添加功能函數:

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},
};

結構體變量snmpData的結構體dataEntryType定義如下所示:

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

步驟4:初始化snmp協議

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 相關配置

    /*
    // 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!!!");   // 添加字符串數據
        trap_oid2.u.intval = 123456;  // 添加整數值

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

        // 企業特定 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地址等參數注冊進去,并且記錄開始時間。如果想使用Trap主動上報,可以參考注釋中的示例代碼。

步驟5:在主循環中運行snmpd_run()函數

snmpdrun()函數代碼如下:

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;
    }

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

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

                // 解析 SNMP 請求并發送響應
                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:
            // 創建 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()函數會執行一個UDP狀態機,當收到SNMP管理的消息后會執行解析以及回復操作。

9運行結果

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

wKgZPGiBnH-Af8ufAABkTNVbjiY519.png

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

wKgZPGiBnH-AVFmeAAC0J56B1B4923.png

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

wKgZPGiBnH-AA8B6AACKGaCTpEo008.png

getLED指令,右鍵指令,點擊get,即可讀出LED狀態:

wKgZO2iBnH-AST2cAACwLfob3AQ849.png

10總結

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

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

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

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

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

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 以太網
    +關注

    關注

    41

    文章

    5997

    瀏覽量

    180804
  • SNMP
    +關注

    關注

    0

    文章

    119

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    第十五章 DAC (上篇)

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

    第十五章 DAC (下篇)

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

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

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

    第二 W55MH32 DHCP示例

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

    第五 W55MH32 UDP示例

    本文介紹了在 W55MH32?芯片上實現 UDP?通信及數據回環測試的方法。闡述了 UDP?協議的概念、特點、應用場景、報文傳輸流程和報文結構,展示了實現過程,借助網絡調試工具完成測試。
    的頭像 發表于 07-24 09:13 ?1045次閱讀
    第五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP<b class='flag-5'>示例</b>

    第九 W55MH32 HTTP Server示例

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

    第十章 W55MH32 SNTP示例

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

    第十一章 W55MH32 SMTP示例

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

    第十二章 W55MH32 NetBIOS示例

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

    第十四章 W55MH32 TFTP示例

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

    第十六章 W55MH32 PING示例

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

    第十七章 W55MH32 ARP示例

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

    第十八章 W55MH32 FTP_Server示例

    本文講解了如何在 W55MH32?芯片上實現 FTP?協議的服務器模式,通過實戰例程展示了使用 W55MH32?作為 FTP?服務器與 PC?端進行文件傳輸、目錄操作等功能的過程,涵蓋獲取網絡配置
    的頭像 發表于 07-24 11:55 ?778次閱讀
    <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?實現 TCP?服務器模式,讓多個客戶端連接進行數據回環測試,通過實戰例程展示了從初始化 socket?到監聽端口、處理客戶端連接
    的頭像 發表于 07-24 16:10 ?1118次閱讀
    第二<b class='flag-5'>十五章</b> <b class='flag-5'>W55MH32</b> TCP_Server_Multi_Socket<b class='flag-5'>示例</b>

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

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