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

操作系统开发

开发平台:

DOS

  1. /*
  2.  * eRTOS SNMP Sample #3 - a very dynamic SNMP MIB application
  3.  *
  4.  * see snmp_d.c, snmp_d_2.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.  * but after optional prewalk of sample #2                      */
  21. /* this function is called within the SNMPD's thread context    */
  22. extern int local_override( BYTE *com, int op, SNMP_OBJECT *reply )
  23. {
  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 can look at the incoming SNMP operation and OID and   *
  27.      * just react if it is a particular one                     */
  28.     if ( _snmp_compare_oid( reply, &testcase ) == 0 ) {
  29.         if ( stricmp( com, "PUBLIC" ))
  30.             return( SNMP_GENERROR );
  31.         switch ( op ) {
  32.             case SNMP_PDU_SET : return( SNMP_READONLY );
  33.             case SNMP_PDU_GET : cputs("Message: getting sysDescrn");
  34.                                 reply->Type = SNMP_OCTETSTR;
  35.                                 strcpy( reply->Syntax.BufChr, "hi there");
  36.                                 reply->SyntaxLen = strlen( reply->Syntax.BufChr );
  37.                                 return( SNMP_NOERROR );
  38.             case SNMP_PDU_NEXT : /* this is difficult, we have to know what
  39.                                   * MIB is next.  Let's take easy way out and
  40.                                   * just pass this on to the static MIB table */
  41.                                  cprintf("GETNEXT of our oid, but we'll passrn");
  42.                                  return( SNMP_NOOVERRIDE );
  43.         }
  44.     } else
  45.         return( SNMP_NOOVERRIDE );
  46. }
  47. void main(int argc, char **argv)
  48. {
  49.     kdebug = 1;
  50.     rt_init( 100 );
  51.     sock_init();
  52.     snmp_compile_oids( local_oids );
  53.     /* insert our Dynamic MIB function */
  54.     _snmp_override = local_override;
  55.     rt_newthread( snmpthread,  1,2048, 0, "snmpd" );
  56.     while (1) {
  57.         rt_sleep(1000);
  58.     }
  59. }