📄 mib2.c
字号:
}
}
/* enable getnext traversal on filled table */
iprtetable.maxlength = 1;
}
/**
* Removes ipRouteTable indexes (.ipRouteDest)
* from index tree.
*
* @param dflt non-zero for the default rte, zero for network rte
* @param ni points to network interface for this rte or NULL
* for default route to be removed.
*/
void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni)
{
u8_t delete = 0;
struct ip_addr dst;
if (dflt != 0)
{
/* the default route 0.0.0.0 */
dst.addr = 0;
delete = 1;
}
else
{
/* route to the network address */
dst.addr = ntohl(ni->ip_addr.addr & ni->netmask.addr);
/* exclude 0.0.0.0 network (reserved for default rte) */
if (dst.addr != 0) delete = 1;
}
if (delete)
{
struct mib_list_rootnode *iprte_rn, *next, *del_rn[4];
struct mib_list_node *iprte_n, *del_n[4];
s32_t iprteidx[4];
u8_t fc, level, del_cnt;
snmp_iptooid(&dst, &iprteidx[0]);
/* mark nodes for deletion */
level = 0;
del_cnt = 0;
iprte_rn = &iprtetree_root;
while ((level < 4) && (iprte_rn != NULL))
{
fc = snmp_mib_node_find(iprte_rn, iprteidx[level], &iprte_n);
if (fc == 0)
{
/* iprteidx[level] does not exist */
del_cnt = 0;
iprte_rn = NULL;
}
else if (fc == 1)
{
del_rn[del_cnt] = iprte_rn;
del_n[del_cnt] = iprte_n;
del_cnt++;
iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
}
else if (fc == 2)
{
/* reset delete (2 or more childs) */
del_cnt = 0;
iprte_rn = (struct mib_list_rootnode*)(iprte_n->nptr);
}
level++;
}
/* delete marked index nodes */
while (del_cnt > 0)
{
del_cnt--;
iprte_rn = del_rn[del_cnt];
iprte_n = del_n[del_cnt];
next = snmp_mib_node_delete(iprte_rn, iprte_n);
if (next != NULL)
{
LWIP_ASSERT("next_count == 0",next->count == 0);
snmp_mib_lrn_free(next);
}
}
}
/* disable getnext traversal on empty table */
if (iprtetree_root.count == 0) iprtetable.maxlength = 0;
}
void snmp_inc_icmpinmsgs(void)
{
icmpinmsgs++;
}
void snmp_inc_icmpinerrors(void)
{
icmpinerrors++;
}
void snmp_inc_icmpindestunreachs(void)
{
icmpindestunreachs++;
}
void snmp_inc_icmpintimeexcds(void)
{
icmpintimeexcds++;
}
void snmp_inc_icmpinparmprobs(void)
{
icmpinparmprobs++;
}
void snmp_inc_icmpinsrcquenchs(void)
{
icmpinsrcquenchs++;
}
void snmp_inc_icmpinredirects(void)
{
icmpinredirects++;
}
void snmp_inc_icmpinechos(void)
{
icmpinechos++;
}
void snmp_inc_icmpinechoreps(void)
{
icmpinechoreps++;
}
void snmp_inc_icmpintimestamps(void)
{
icmpintimestamps++;
}
void snmp_inc_icmpintimestampreps(void)
{
icmpintimestampreps++;
}
void snmp_inc_icmpinaddrmasks(void)
{
icmpinaddrmasks++;
}
void snmp_inc_icmpinaddrmaskreps(void)
{
icmpinaddrmaskreps++;
}
void snmp_inc_icmpoutmsgs(void)
{
icmpoutmsgs++;
}
void snmp_inc_icmpouterrors(void)
{
icmpouterrors++;
}
void snmp_inc_icmpoutdestunreachs(void)
{
icmpoutdestunreachs++;
}
void snmp_inc_icmpouttimeexcds(void)
{
icmpouttimeexcds++;
}
void snmp_inc_icmpoutparmprobs(void)
{
icmpoutparmprobs++;
}
void snmp_inc_icmpoutsrcquenchs(void)
{
icmpoutsrcquenchs++;
}
void snmp_inc_icmpoutredirects(void)
{
icmpoutredirects++;
}
void snmp_inc_icmpoutechos(void)
{
icmpoutechos++;
}
void snmp_inc_icmpoutechoreps(void)
{
icmpoutechoreps++;
}
void snmp_inc_icmpouttimestamps(void)
{
icmpouttimestamps++;
}
void snmp_inc_icmpouttimestampreps(void)
{
icmpouttimestampreps++;
}
void snmp_inc_icmpoutaddrmasks(void)
{
icmpoutaddrmasks++;
}
void snmp_inc_icmpoutaddrmaskreps(void)
{
icmpoutaddrmaskreps++;
}
void snmp_inc_tcpactiveopens(void)
{
tcpactiveopens++;
}
void snmp_inc_tcppassiveopens(void)
{
tcppassiveopens++;
}
void snmp_inc_tcpattemptfails(void)
{
tcpattemptfails++;
}
void snmp_inc_tcpestabresets(void)
{
tcpestabresets++;
}
void snmp_inc_tcpinsegs(void)
{
tcpinsegs++;
}
void snmp_inc_tcpoutsegs(void)
{
tcpoutsegs++;
}
void snmp_inc_tcpretranssegs(void)
{
tcpretranssegs++;
}
void snmp_inc_tcpinerrs(void)
{
tcpinerrs++;
}
void snmp_inc_tcpoutrsts(void)
{
tcpoutrsts++;
}
void snmp_inc_udpindatagrams(void)
{
udpindatagrams++;
}
void snmp_inc_udpnoports(void)
{
udpnoports++;
}
void snmp_inc_udpinerrors(void)
{
udpinerrors++;
}
void snmp_inc_udpoutdatagrams(void)
{
udpoutdatagrams++;
}
/**
* Inserts udpTable indexes (.udpLocalAddress.udpLocalPort)
* into index tree.
*/
void snmp_insert_udpidx_tree(struct udp_pcb *pcb)
{
struct mib_list_rootnode *udp_rn;
struct mib_list_node *udp_node;
struct ip_addr ip;
s32_t udpidx[5];
u8_t level;
LWIP_ASSERT("pcb != NULL", pcb != NULL);
ip.addr = ntohl(pcb->local_ip.addr);
snmp_iptooid(&ip, &udpidx[0]);
udpidx[4] = pcb->local_port;
udp_rn = &udp_root;
for (level = 0; level < 5; level++)
{
udp_node = NULL;
snmp_mib_node_insert(udp_rn, udpidx[level], &udp_node);
if ((level != 4) && (udp_node != NULL))
{
if (udp_node->nptr == NULL)
{
udp_rn = snmp_mib_lrn_alloc();
udp_node->nptr = (struct mib_node*)udp_rn;
if (udp_rn != NULL)
{
if (level == 3)
{
udp_rn->get_object_def = udpentry_get_object_def;
udp_rn->get_value = udpentry_get_value;
udp_rn->set_test = noleafs_set_test;
udp_rn->set_value = noleafs_set_value;
}
}
else
{
/* udp_rn == NULL, malloc failure */
LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_udpidx_tree() insert failed, mem full"));
break;
}
}
else
{
udp_rn = (struct mib_list_rootnode*)udp_node->nptr;
}
}
}
udptable.maxlength = 1;
}
/**
* Removes udpTable indexes (.udpLocalAddress.udpLocalPort)
* from index tree.
*/
void snmp_delete_udpidx_tree(struct udp_pcb *pcb)
{
struct mib_list_rootnode *udp_rn, *next, *del_rn[5];
struct mib_list_node *udp_n, *del_n[5];
struct ip_addr ip;
s32_t udpidx[5];
u8_t bindings, fc, level, del_cnt;
LWIP_ASSERT("pcb != NULL", pcb != NULL);
ip.addr = ntohl(pcb->local_ip.addr);
snmp_iptooid(&ip, &udpidx[0]);
udpidx[4] = pcb->local_port;
/* count PCBs for a given binding
(e.g. when reusing ports or for temp output PCBs) */
bindings = 0;
pcb = udp_pcbs;
while ((pcb != NULL))
{
if ((pcb->local_ip.addr == ip.addr) &&
(pcb->local_port == udpidx[4]))
{
bindings++;
}
pcb = pcb->next;
}
if (bindings == 1)
{
/* selectively remove */
/* mark nodes for deletion */
level = 0;
del_cnt = 0;
udp_rn = &udp_root;
while ((level < 5) && (udp_rn != NULL))
{
fc = snmp_mib_node_find(udp_rn, udpidx[level], &udp_n);
if (fc == 0)
{
/* udpidx[level] does not exist */
del_cnt = 0;
udp_rn = NULL;
}
else if (fc == 1)
{
del_rn[del_cnt] = udp_rn;
del_n[del_cnt] = udp_n;
del_cnt++;
udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
}
else if (fc == 2)
{
/* reset delete (2 or more childs) */
del_cnt = 0;
udp_rn = (struct mib_list_rootnode*)(udp_n->nptr);
}
level++;
}
/* delete marked index nodes */
while (del_cnt > 0)
{
del_cnt--;
udp_rn = del_rn[del_cnt];
udp_n = del_n[del_cnt];
next = snmp_mib_node_delete(udp_rn, udp_n);
if (next != NULL)
{
LWIP_ASSERT("next_count == 0",next->count == 0);
snmp_mib_lrn_free(next);
}
}
}
/* disable getnext traversal on empty table */
if (udp_root.count == 0) udptable.maxlength = 0;
}
void snmp_inc_snmpinpkts(void)
{
snmpinpkts++;
}
void snmp_inc_snmpoutpkts(void)
{
snmpoutpkts++;
}
void snmp_inc_snmpinbadversions(void)
{
snmpinbadversions++;
}
void snmp_inc_snmpinbadcommunitynames(void)
{
snmpinbadcommunitynames++;
}
void snmp_inc_snmpinbadcommunityuses(void)
{
snmpinbadcommunityuses++;
}
void snmp_inc_snmpinasnparseerrs(void)
{
snmpinasnparseerrs++;
}
void snmp_inc_snmpintoobigs(void)
{
snmpintoobigs++;
}
void snmp_inc_snmpinnosuchnames(void)
{
snmpinnosuchnames++;
}
void snmp_inc_snmpinbadvalues(void)
{
snmpinbadvalues++;
}
void snmp_inc_snmpinreadonlys(void)
{
snmpinreadonlys++;
}
void snmp_inc_snmpingenerrs(void)
{
snmpingenerrs++;
}
void snmp_add_snmpintotalreqvars(u8_t value)
{
snmpintotalreqvars += value;
}
void snmp_add_snmpintotalsetvars(u8_t value)
{
snmpintotalsetvars += value;
}
void snmp_inc_snmpingetrequests(void)
{
snmpingetrequests++;
}
void snmp_inc_snmpingetnexts(void)
{
snmpingetnexts++;
}
void snmp_inc_snmpinsetrequests(void)
{
snmpinsetrequests++;
}
void snmp_inc_snmpingetresponses(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -