SNMP_D_2.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:3k
源码类别:

操作系统开发

开发平台:

DOS

  1. /*
  2.  * eRTOS SNMP Sample #2 - a more powerful, dynamic SNMP MIB application
  3.  *
  4.  * see snmp_d.c for background
  5.  */
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <snmp.h>
  9. #include <rtos.h>
  10. #include <net.h>
  11. #include <time.h>
  12. esnmp_oid far local_oids[] =
  13.     { { 0,{1,3,6,1,2,1,1,1,0, -1}, NULL, SNMP_DISPLAYSTR, (DWORD)"eRTOS example" },
  14.       { 0,{1,3,6,1,2,1,1,3,0, -1}, NULL, SNMP_TIMETICKS, 1 },
  15.       { 0,{1,3,6,1,2,1,1,4,0, -1}, NULL, SNMP_DISPLAYSTR, (DWORD)"Contact: joe" },
  16.       /* list terminator */
  17.       { 0,{ -1 }, NULL, 0, 0 }
  18.       };
  19. /* User function called before each MIB walk */
  20. /* this function is called within the SNMPD's thread context */
  21. void prewalkfn( int op,  SNMP_OBJECT *list )
  22. {
  23.     int temp;
  24.                  /* just using LEN and OID part, all other fields unused */
  25.     static esnmp_oid testcase = { 9, { 1,3,6,1,2,1,1,1,0,-1}, NULL, 0, 0 };
  26.     /* we have the semaphore on the table, nothing can access it while  *
  27.      * we are inside this function                                      */
  28.     /***********************************************************/
  29.     /* we can update data */
  30.     /* example, we will set the uptime value */
  31.     /* we are about to call DOS, so block thread switches for the instant */
  32.     kblock();
  33.     /* call Borland fn to get uptime of application in 18/second */
  34.     local_oids[ 1 ].data2 = clock() / 18;
  35.     kunblock();
  36.     /* we don't have to recompile after changes to data values  *
  37.      * where the OID is unchanged                               */
  38.     /***********************************************************/
  39.     /* we can look at the incoming SNMP operation and OID and   *
  40.      * just react if it is a particular one, print out message  */
  41.     if ( _snmp_compare_oid( list, &testcase ) == 0 ) {
  42.         if ( op == SNMP_PDU_GET )
  43.             cputs("Message: getting sysDescrn");
  44.         if ( op == SNMP_PDU_NEXT )
  45.             cputs("Message: getting next one past sysDescrn");
  46.     }
  47.     /***********************************************************/
  48.     /* we can change the MIB table - there are two possibilities,
  49.      *     - we can work with a static table and change its entries
  50.      *     - we can kcalloc() a new tree to whatever size is needed
  51.      */
  52.     /* example, here we will just change an entry's OID value                *
  53.      * note, this example can cause a short loop if GETNEXT is being used to *
  54.      * walk the MIB table.  But don't assume we will be called in sequence   *
  55.      * or just by one SNMP client on one client computer                     */
  56.     temp = local_oids[ 2 ].oid[ 8 ];
  57.     temp = (temp+1) % 8;
  58.     local_oids[2].oid[8] = temp;
  59.     /* we must recompile the MIB table after changes to OIDs */
  60.     snmp_compile_oids( local_oids );
  61. }
  62. void main(int argc, char **argv)
  63. {
  64.     kdebug = 1;
  65.     rt_init( 100 );
  66.     sock_init();
  67.     snmp_compile_oids( local_oids );
  68.     /* tell SNMP server to call our function before walking the MIB table */
  69.     _snmp_prewalk = prewalkfn;
  70.     rt_newthread( snmpthread,  1,2048, 0, "snmpd" );
  71.     while (1) {
  72.         rt_sleep(1000);
  73.     }
  74. }