⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mib2.c

📁 《嵌入式网络系统设计-基于Atmel ARM7 系列》这个本书的光盘资料
💻 C
📖 第 1 页 / 共 5 页
字号:
{  struct mib_list_node *if_node = NULL;  snmp_mib_node_insert(&iflist_root, iflist_root.count + 1, &if_node);  /* enable getnext traversal on filled table */  iftable.maxlength = 1;}void snmp_dec_iflist(void){  snmp_mib_node_delete(&iflist_root, iflist_root.tail);  /* disable getnext traversal on empty table */  if(iflist_root.count == 0) iftable.maxlength = 0;}/** * Inserts ARP table indexes (.xIfIndex.xNetAddress) * into arp table index trees (both atTable and ipNetToMediaTable). */void snmp_insert_arpidx_tree(struct netif *ni, struct ip_addr *ip){  struct mib_list_rootnode *at_rn;  struct mib_list_node *at_node;  struct ip_addr hip;  s32_t arpidx[5];  u8_t level, tree;  LWIP_ASSERT("ni != NULL", ni != NULL);  snmp_netiftoifindex(ni, &arpidx[0]);  hip.addr = ntohl(ip->addr);  snmp_iptooid(&hip, &arpidx[1]);  for (tree = 0; tree < 2; tree++)  {    if (tree == 0)    {      at_rn = &arptree_root;    }    else    {      at_rn = &ipntomtree_root;    }    for (level = 0; level < 5; level++)    {      at_node = NULL;      snmp_mib_node_insert(at_rn, arpidx[level], &at_node);      if ((level != 4) && (at_node != NULL))      {        if (at_node->nptr == NULL)        {          at_rn = snmp_mib_lrn_alloc();          at_node->nptr = (struct mib_node*)at_rn;          if (at_rn != NULL)          {            if (level == 3)            {              if (tree == 0)              {                at_rn->get_object_def = atentry_get_object_def;                at_rn->get_value = atentry_get_value;              }              else              {                at_rn->get_object_def = ip_ntomentry_get_object_def;                at_rn->get_value = ip_ntomentry_get_value;              }              at_rn->set_test = noleafs_set_test;              at_rn->set_value = noleafs_set_value;            }          }          else          {            /* at_rn == NULL, malloc failure */            LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_arpidx_tree() insert failed, mem full"));            break;          }        }        else        {          at_rn = (struct mib_list_rootnode*)at_node->nptr;        }      }    }  }  /* enable getnext traversal on filled tables */  at.maxlength = 1;  ipntomtable.maxlength = 1;}/** * Removes ARP table indexes (.xIfIndex.xNetAddress) * from arp table index trees. */void snmp_delete_arpidx_tree(struct netif *ni, struct ip_addr *ip){  struct mib_list_rootnode *at_rn, *next, *del_rn[5];  struct mib_list_node *at_n, *del_n[5];  struct ip_addr hip;  s32_t arpidx[5];  u8_t fc, tree, level, del_cnt;  snmp_netiftoifindex(ni, &arpidx[0]);  hip.addr = ntohl(ip->addr);  snmp_iptooid(&hip, &arpidx[1]);  for (tree = 0; tree < 2; tree++)  {    /* mark nodes for deletion */    if (tree == 0)    {      at_rn = &arptree_root;    }    else    {      at_rn = &ipntomtree_root;    }    level = 0;    del_cnt = 0;    while ((level < 5) && (at_rn != NULL))    {      fc = snmp_mib_node_find(at_rn, arpidx[level], &at_n);      if (fc == 0)      {        /* arpidx[level] does not exist */        del_cnt = 0;        at_rn = NULL;      }      else if (fc == 1)      {        del_rn[del_cnt] = at_rn;        del_n[del_cnt] = at_n;        del_cnt++;        at_rn = (struct mib_list_rootnode*)(at_n->nptr);      }      else if (fc == 2)      {        /* reset delete (2 or more childs) */        del_cnt = 0;        at_rn = (struct mib_list_rootnode*)(at_n->nptr);      }      level++;    }    /* delete marked index nodes */    while (del_cnt > 0)    {      del_cnt--;      at_rn = del_rn[del_cnt];      at_n = del_n[del_cnt];      next = snmp_mib_node_delete(at_rn, at_n);      if (next != NULL)      {        LWIP_ASSERT("next_count == 0",next->count == 0);        snmp_mib_lrn_free(next);      }    }  }  /* disable getnext traversal on empty tables */  if(arptree_root.count == 0) at.maxlength = 0;  if(ipntomtree_root.count == 0) ipntomtable.maxlength = 0;}void snmp_inc_ipinreceives(void){  ipinreceives++;}void snmp_inc_ipinhdrerrors(void){  ipinhdrerrors++;}void snmp_inc_ipinaddrerrors(void){  ipinaddrerrors++;}void snmp_inc_ipforwdatagrams(void){  ipforwdatagrams++;}void snmp_inc_ipinunknownprotos(void){  ipinunknownprotos++;}void snmp_inc_ipindiscards(void){  ipindiscards++;}void snmp_inc_ipindelivers(void){  ipindelivers++;}void snmp_inc_ipoutrequests(void){  ipoutrequests++;}void snmp_inc_ipoutdiscards(void){  ipoutdiscards++;}void snmp_inc_ipoutnoroutes(void){  ipoutnoroutes++;}void snmp_inc_ipreasmreqds(void){  ipreasmreqds++;}void snmp_inc_ipreasmoks(void){  ipreasmoks++;}void snmp_inc_ipreasmfails(void){  ipreasmfails++;}void snmp_inc_ipfragoks(void){  ipfragoks++;}void snmp_inc_ipfragfails(void){  ipfragfails++;}void snmp_inc_ipfragcreates(void){  ipfragcreates++;}void snmp_inc_iproutingdiscards(void){  iproutingdiscards++;}/** * Inserts ipAddrTable indexes (.ipAdEntAddr) * into index tree. */void snmp_insert_ipaddridx_tree(struct netif *ni){  struct mib_list_rootnode *ipa_rn;  struct mib_list_node *ipa_node;  struct ip_addr ip;  s32_t ipaddridx[4];  u8_t level;  LWIP_ASSERT("ni != NULL", ni != NULL);  ip.addr = ntohl(ni->ip_addr.addr);  snmp_iptooid(&ip, &ipaddridx[0]);  level = 0;  ipa_rn = &ipaddrtree_root;  while (level < 4)  {    ipa_node = NULL;    snmp_mib_node_insert(ipa_rn, ipaddridx[level], &ipa_node);    if ((level != 3) && (ipa_node != NULL))    {      if (ipa_node->nptr == NULL)      {        ipa_rn = snmp_mib_lrn_alloc();        ipa_node->nptr = (struct mib_node*)ipa_rn;        if (ipa_rn != NULL)        {          if (level == 2)          {            ipa_rn->get_object_def = ip_addrentry_get_object_def;            ipa_rn->get_value = ip_addrentry_get_value;            ipa_rn->set_test = noleafs_set_test;            ipa_rn->set_value = noleafs_set_value;          }        }        else        {          /* ipa_rn == NULL, malloc failure */          LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_ipaddridx_tree() insert failed, mem full"));          break;        }      }      else      {        ipa_rn = (struct mib_list_rootnode*)ipa_node->nptr;      }    }    level++;  }  /* enable getnext traversal on filled table */  ipaddrtable.maxlength = 1;}/** * Removes ipAddrTable indexes (.ipAdEntAddr) * from index tree. */void snmp_delete_ipaddridx_tree(struct netif *ni){  struct mib_list_rootnode *ipa_rn, *next, *del_rn[4];  struct mib_list_node *ipa_n, *del_n[4];  struct ip_addr ip;  s32_t ipaddridx[4];  u8_t fc, level, del_cnt;  LWIP_ASSERT("ni != NULL", ni != NULL);  ip.addr = ntohl(ni->ip_addr.addr);  snmp_iptooid(&ip, &ipaddridx[0]);  /* mark nodes for deletion */  level = 0;  del_cnt = 0;  ipa_rn = &ipaddrtree_root;  while ((level < 4) && (ipa_rn != NULL))  {    fc = snmp_mib_node_find(ipa_rn, ipaddridx[level], &ipa_n);    if (fc == 0)    {      /* ipaddridx[level] does not exist */      del_cnt = 0;      ipa_rn = NULL;    }    else if (fc == 1)    {      del_rn[del_cnt] = ipa_rn;      del_n[del_cnt] = ipa_n;      del_cnt++;      ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);    }    else if (fc == 2)    {      /* reset delete (2 or more childs) */      del_cnt = 0;      ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);    }    level++;  }  /* delete marked index nodes */  while (del_cnt > 0)  {    del_cnt--;    ipa_rn = del_rn[del_cnt];    ipa_n = del_n[del_cnt];    next = snmp_mib_node_delete(ipa_rn, ipa_n);    if (next != NULL)    {      LWIP_ASSERT("next_count == 0",next->count == 0);      snmp_mib_lrn_free(next);    }  }  /* disable getnext traversal on empty table */  if (ipaddrtree_root.count == 0) ipaddrtable.maxlength = 0;}/** * Inserts ipRouteTable indexes (.ipRouteDest) * into index tree. * * @param dflt non-zero for the default rte, zero for network rte * @param netif points to network interface for this rte * * @todo record sysuptime for _this_ route when it is installed *   (needed for ipRouteAge) in the netif. */void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni){  u8_t insert = 0;  struct ip_addr dst;  if (dflt != 0)  {    /* the default route 0.0.0.0 */    dst.addr = 0;    insert = 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) insert = 1;  }  if (insert)  {    struct mib_list_rootnode *iprte_rn;    struct mib_list_node *iprte_node;    s32_t iprteidx[4];    u8_t level;    snmp_iptooid(&dst, &iprteidx[0]);    level = 0;    iprte_rn = &iprtetree_root;    while (level < 4)    {      iprte_node = NULL;      snmp_mib_node_insert(iprte_rn, iprteidx[level], &iprte_node);      if ((level != 3) && (iprte_node != NULL))      {        if (iprte_node->nptr == NULL)        {          iprte_rn = snmp_mib_lrn_alloc();          iprte_node->nptr = (struct mib_node*)iprte_rn;          if (iprte_rn != NULL)          {            if (level == 2)            {              iprte_rn->get_object_def = ip_rteentry_get_object_def;              iprte_rn->get_value = ip_rteentry_get_value;              iprte_rn->set_test = noleafs_set_test;              iprte_rn->set_value = noleafs_set_value;            }          }          else          {            /* iprte_rn == NULL, malloc failure */            LWIP_DEBUGF(SNMP_MIB_DEBUG,("snmp_insert_iprteidx_tree() insert failed, mem full"));            break;          }        }        else        {          iprte_rn = (struct mib_list_rootnode*)iprte_node->nptr;        }      }      level++;    }  }  /* 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 netif 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);      }    }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -