关于这方面的资料网上非常少,做一下笔记。
在LwIP中,在\lwip-1.4.1\src\core\snmp目录下有SNMP相关的c文件,
在lwip-1.4.1\src\include\lwip目录下有SNMP相关的h文件,
在\lwip-1.4.1\doc目录下有一个snmp代理的说明,这是LwIP最直接的说明文档:
snmp_init(void)中会设置UDP接收的回调函数,这样,所有发往本机161端口的udp包都会由snmp_recv处理
/** * Starts SNMP Agent. * Allocates UDP pcb and binds it to IP_ADDR_ANY port 161. */ void snmp_init(void) { struct snmp_msg_pstat *msg_ps; u8_t i; snmp1_pcb = udp_new(); if (snmp1_pcb != NULL) { udp_recv(snmp1_pcb, snmp_recv, (void *)SNMP_IN_PORT); udp_bind(snmp1_pcb, IP_ADDR_ANY, SNMP_IN_PORT); }
snmp_recv函数中会调用snmp_pdu_header_check函数,检查SNMP PDU的头部是否正确
/* lwIP UDP receive callback function */ static void snmp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)