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

操作系统开发

开发平台:

DOS

  1. /*
  2.  * eRTOS SNMP Sample
  3.  *
  4.  * Most eRTOS SNMP applications use static tables to hold the MIBs
  5.  * This simple example shows how to accomplish that.  Even though
  6.  * the table is static, the data can be dynamic, as is shown in my_fn
  7.  *
  8.  * For a dynamic SNMP MIB table, see snmp_d_2.c
  9.  *
  10.  * You will need an SNMP client to test this program.
  11.  * Excellent free SNMP clients can be found at ucd-snmp.ucdavis.edu
  12.  *  eg. snmpwalk  hostname  public
  13.  *          will display all SNMP variables found on hostname
  14.  *      snmpset hostname public system.sysDesc.0 s hi
  15.  *          will faile because 1.3.6.1.2.1.1.0 is readonly
  16.  *      snmpset hostname public system.sysUpTime.0 i 200
  17.  *          will successfully (temporarily) set the uptime to 2 seconds
  18.  */
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include <snmp.h>
  22. #include <rtos.h>
  23. #include <net.h>
  24. /*
  25.  * Sample SNMP exensible function
  26.  *
  27.  * Note: we are passed data1 and data2 parameters from our esnmp_oid structure
  28.  *       this can be used (as shown) to use one function for many different
  29.  *       snmp OID entries
  30.  */
  31. /* following pragma removes unnecessary warning */
  32. #pragma argsused
  33. long my_fn( udp_Socket *udp, char *community, int op, SNMP_OBJECT *reply, DWORD data1, DWORD data2 )
  34. {
  35.     /* must use community string PUBLIC */
  36.     if ( stricmp( community, "PUBLIC" ))
  37.         return( SNMP_GENERROR );
  38.     switch ( data1 ) {
  39.         case    1 : /* this attribute is readonly */
  40.                     if ( op == SNMP_PDU_SET )
  41.                         return( SNMP_READONLY );
  42.                     /* it is a GET or NEXT request */
  43.                     reply->Type = SNMP_OCTETSTR;
  44.                     strcpy( reply->Syntax.BufChr, (char *)data2 );
  45.                     reply->SyntaxLen = strlen( (char*)data2 );
  46.                     return( 0 );
  47.         case    2 : if ( op == SNMP_PDU_SET ) {
  48.                         /* a successful set returns the new value */
  49.                         data2 = reply->Syntax.LngInt;
  50.                     }
  51.                     reply->Type = SNMP_TIMETICKS;
  52.                     reply->Syntax.LngInt = data2;
  53.                     return( 0 );
  54.     }
  55. }
  56. esnmp_oid far local_oids[] =
  57.       /* the first two examples use a client function to return results */
  58.       /* note: we pass the client function some user-defined parameters */
  59.     { { 0,{1,3,6,1,2,1,1,1,0, -1}, my_fn, 1, (DWORD)"eRTOS example" },
  60.       { 0,{1,3,6,1,2,1,1,3,0, -1}, my_fn, 2, 1 },
  61.       /* next example does not use a client function, uses built-in reply */
  62.       { 0,{1,3,6,1,2,1,1,4,0, -1}, NULL, SNMP_DISPLAYSTR, (DWORD)"Contact: joe" },
  63.       /* return a pointer to an OID */
  64.       { 0,{1,3,6,1,2,1,1,5,0, -1}, NULL, SNMP_OBJECTID, (DWORD)"1.3.6.1.3" },
  65.       /* list terminator */
  66.       { 0,{ -1 }, NULL, 0, 0 }
  67.       };
  68. void main(int argc, char **argv)
  69. {
  70.     kdebug = 1;
  71.     rt_init( 100 );
  72.     sock_init();
  73.     snmp_compile_oids( local_oids );
  74.     rt_newthread( snmpthread,  1,2048, 0, "snmpd" );
  75.     while (1) {
  76.         rt_sleep(1000);
  77.     }
  78. }