coexistance.c
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:3k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * RFC 1908: Coexistence between SNMPv1 and SNMPv2
  3.  */
  4. /**********************************************************************
  5.  *
  6.  *           Copyright 1997 by Carnegie Mellon University
  7.  * 
  8.  *                       All Rights Reserved
  9.  * 
  10.  * Permission to use, copy, modify, and distribute this software and its
  11.  * documentation for any purpose and without fee is hereby granted,
  12.  * provided that the above copyright notice appear in all copies and that
  13.  * both that copyright notice and this permission notice appear in
  14.  * supporting documentation, and that the name of CMU not be
  15.  * used in advertising or publicity pertaining to distribution of the
  16.  * software without specific, written prior permission.
  17.  * 
  18.  * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  19.  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
  20.  * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  21.  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22.  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  23.  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  24.  * SOFTWARE.
  25.  * 
  26.  * Author: Ryan Troll <ryan+@andrew.cmu.edu>
  27.  * 
  28.  **********************************************************************/
  29. #include "config.h"
  30. #include "config.h"
  31. #include <stdio.h>
  32. #if HAVE_UNISTD_H
  33. #include <unistd.h>
  34. #endif
  35. #if HAVE_STDLIB_H
  36. #include <stdlib.h>
  37. #endif
  38. #if HAVE_SYS_TYPES_H
  39. #include <sys/types.h>
  40. #endif
  41. #if HAVE_CTYPE_H
  42. #include <ctype.h>
  43. #endif
  44. #if HAVE_GNUMALLOC_H
  45. #include <gnumalloc.h>
  46. #elif HAVE_MALLOC_H && !defined(_SQUID_FREEBSD_) && !defined(_SQUID_NEXT_)
  47. #include <malloc.h>
  48. #endif
  49. #if HAVE_MEMORY_H
  50. #include <memory.h>
  51. #endif
  52. #ifdef HAVE_STRING_H
  53. #include <string.h>
  54. #endif
  55. #ifdef HAVE_STRINGS_H
  56. #include <strings.h>
  57. #endif
  58. #if HAVE_BSTRING_H
  59. #include <bstring.h>
  60. #endif
  61. #if HAVE_SYS_SOCKET_H
  62. #include <sys/socket.h>
  63. #endif
  64. #if HAVE_NETINET_IN_H
  65. #include <netinet/in.h>
  66. #endif
  67. #if HAVE_ARPA_INET_H
  68. #include <arpa/inet.h>
  69. #endif
  70. #if HAVE_SYS_TIME_H
  71. #include <sys/time.h>
  72. #endif
  73. #if HAVE_NETDB_H
  74. #include <netdb.h>
  75. #endif
  76. #include "snmp.h"
  77. #include "asn1.h"
  78. #include "snmp_vars.h"
  79. #include "snmp_pdu.h"
  80. #include "snmp_error.h"
  81. #include "snmp_api_error.h"
  82. #include "util.h"
  83. /*
  84.  * RFC 1908: Coexistence between SNMPv1 and SNMPv2
  85.  *
  86.  * These convert:
  87.  *
  88.  *   V1 PDUs from an ** AGENT **   to V2 PDUs for an ** MANAGER **
  89.  *   V2 PDUs from an ** MANAGER ** to V1 PDUs for an ** AGENT **
  90.  *
  91.  * We will never convert V1 information from a manager into V2 PDUs.  V1
  92.  * requests are always honored by V2 agents, and the responses will be 
  93.  * valid V1 responses.  (I think. XXXXX)
  94.  *
  95.  */
  96. int 
  97. snmp_coexist_V2toV1(struct snmp_pdu *PDU)
  98. {
  99.     /* Per 3.1.1:
  100.      */
  101.     switch (PDU->command) {
  102.     case SNMP_PDU_GET:
  103.     case SNMP_PDU_GETNEXT:
  104.     case SNMP_PDU_SET:
  105. return (1);
  106. break;
  107.     case SNMP_PDU_GETBULK:
  108. PDU->non_repeaters = 0;
  109. PDU->max_repetitions = 0;
  110. PDU->command = SNMP_PDU_GETNEXT;
  111. return (1);
  112. break;
  113.     default:
  114. snmplib_debug(2, "Unable to translate PDU %d to SNMPv1!n", PDU->command);
  115. snmp_set_api_error(SNMPERR_PDU_TRANSLATION);
  116. return (0);
  117.     }
  118. }