home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c083 / 19.ddi / GENINC32.PAK / SNMP.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-02  |  8.8 KB  |  349 lines

  1. /*++ BUILD Version: 0001    // Increment this if a change has global effects
  2.  
  3. Copyright (c) 1992, Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     snmp.h
  8.  
  9. Abstract:
  10.  
  11.     Type definitions for SNMP Extension Agent Development.
  12.  
  13.  
  14.     This PRE-RELEASE header file contains definitions that may change
  15.     prior to the official release of Windows NT.   Microsoft makes no
  16.     warranty of any kind as to the suitability or correctness of this
  17.     code.
  18.  
  19.  
  20. --*/
  21.  
  22. #ifndef __SNMP_H
  23. #define __SNMP_H
  24.  
  25. static char *snmp__h = "@(#) $Logfile:   Y:/ADMIN/BC4RTL/RTLAPI/SNMP.H_V  $ $Revision:   1.1  $";
  26.  
  27.  
  28. #ifndef __WINDOWS_H
  29. #include <windows.h>
  30. #endif
  31.  
  32.  
  33. //
  34. // SNMP API Constant Definitions
  35. //
  36.  
  37. // Purely for code readability
  38. #define IN
  39. #define OUT
  40.  
  41.  
  42. // API return type
  43.  
  44. #define SNMPAPI          int
  45.  
  46. #if (_MSC_VER >= 800) || defined(__BORLANDC__)
  47. #define SNMP_FUNC_TYPE   __stdcall
  48. #else
  49. #define SNMP_FUNC_TYPE
  50. #endif
  51.  
  52.  
  53. // API return codes
  54. #define SNMPAPI_NOERROR TRUE
  55. #define SNMPAPI_ERROR   FALSE
  56.  
  57.  
  58. // class field of BER tag
  59. #define ASN_UNIVERSAL         0x00
  60. #define ASN_APPLICATION       0x40
  61. #define ASN_CONTEXTSPECIFIC   0x80
  62. #define ASN_PRIVATE           0xC0
  63.  
  64. // primative/constructed field of BER tag
  65. #define ASN_PRIMATIVE         0x00
  66. #define ASN_CONSTRUCTOR       0x20
  67.  
  68.  
  69. // ASN.1 simple types
  70. #define ASN_INTEGER           (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x02)
  71. #define ASN_OCTETSTRING       (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x04)
  72. #define ASN_NULL              (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x05)
  73. #define ASN_OBJECTIDENTIFIER  (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x06)
  74.  
  75. // ASN.1 constructor types
  76. #define ASN_SEQUENCE          (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10)
  77. #define ASN_SEQUENCEOF        ASN_SEQUENCE
  78.  
  79. // ASN.1 application specific primatives
  80. #define ASN_RFC1155_IPADDRESS  (ASN_APPLICATION | ASN_PRIMATIVE | 0x00)
  81. #define ASN_RFC1155_COUNTER    (ASN_APPLICATION | ASN_PRIMATIVE | 0x01)
  82. #define ASN_RFC1155_GAUGE      (ASN_APPLICATION | ASN_PRIMATIVE | 0x02)
  83. #define ASN_RFC1155_TIMETICKS  (ASN_APPLICATION | ASN_PRIMATIVE | 0x03)
  84. #define ASN_RFC1155_OPAQUE     (ASN_APPLICATION | ASN_PRIMATIVE | 0x04)
  85. #define ASN_RFC1213_DISPSTRING ASN_OCTETSTRING
  86.  
  87. // ASN.1 application specific constructors
  88. #define ASN_RFC1157_GETREQUEST     \
  89.             (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x00)
  90. #define ASN_RFC1157_GETNEXTREQUEST \
  91.             (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x01)
  92. #define ASN_RFC1157_GETRESPONSE    \
  93.             (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x02)
  94. #define ASN_RFC1157_SETREQUEST     \
  95.             (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x03)
  96. #define ASN_RFC1157_TRAP           \
  97.             (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x04)
  98.  
  99.  
  100. // PDU error status
  101. #define SNMP_ERRORSTATUS_NOERROR        0
  102. #define SNMP_ERRORSTATUS_TOOBIG         1
  103. #define SNMP_ERRORSTATUS_NOSUCHNAME     2
  104. #define SNMP_ERRORSTATUS_BADVALUE       3
  105. #define SNMP_ERRORSTATUS_READONLY       4
  106. #define SNMP_ERRORSTATUS_GENERR         5
  107.  
  108.  
  109. // PDU generic traps
  110. #define SNMP_GENERICTRAP_COLDSTART      0
  111. #define SNMP_GENERICTRAP_WARMSTART      1
  112. #define SNMP_GENERICTRAP_LINKDOWN       2
  113. #define SNMP_GENERICTRAP_LINKUP         3
  114. #define SNMP_GENERICTRAP_AUTHFAILURE    4
  115. #define SNMP_GENERICTRAP_EGPNEIGHLOSS   5
  116. #define SNMP_GENERICTRAP_ENTERSPECIFIC  6
  117.  
  118.  
  119.  
  120. //
  121. // SNMP Error codes
  122. //
  123.  
  124. // General error codes
  125. #define SNMP_MEM_ALLOC_ERROR          1
  126.  
  127. // BER API error codes (using Get/Set LastError)
  128. #define SNMP_BERAPI_INVALID_LENGTH    10
  129. #define SNMP_BERAPI_INVALID_TAG       11
  130. #define SNMP_BERAPI_OVERFLOW          12
  131. #define SNMP_BERAPI_SHORT_BUFFER      13
  132. #define SNMP_BERAPI_INVALID_OBJELEM   14
  133.  
  134. // PDU API Error Codes
  135. #define SNMP_PDUAPI_UNRECOGNIZED_PDU  20
  136. #define SNMP_PDUAPI_INVALID_ES        21
  137. #define SNMP_PDUAPI_INVALID_GT        22
  138.  
  139. // AUTHENTICATION API Error Codes
  140. #define SNMP_AUTHAPI_INVALID_VERSION  30
  141. #define SNMP_AUTHAPI_INVALID_MSG_TYPE 31
  142. #define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32
  143.  
  144.  
  145.  
  146. //
  147. // SNMP API Type Definitions
  148. //
  149.  
  150. typedef long           AsnInteger;
  151. typedef struct {
  152.     BYTE *stream;
  153.     UINT  length;
  154.     BOOL dynamic;
  155. }                      AsnOctetString;
  156. typedef struct {
  157.     UINT idLength;
  158.     UINT *ids;
  159. }                      AsnObjectIdentifier;
  160.  
  161. typedef AsnOctetString AsnSequence;
  162. typedef AsnSequence    AsnImplicitSequence;
  163.  
  164. typedef AsnOctetString AsnIPAddress;
  165. typedef AsnOctetString AsnDisplayString;
  166. typedef DWORD          AsnCounter;
  167. typedef DWORD          AsnGauge;
  168. typedef DWORD          AsnTimeticks;
  169. typedef AsnOctetString AsnOpaque;
  170.  
  171. typedef struct {
  172.     BYTE asnType;
  173.     union {
  174.         // RFC 1155 SimpleSyntax (subset of ISO ASN.1)
  175.         AsnInteger           number;
  176.         AsnOctetString       string;
  177.         AsnObjectIdentifier  object;
  178.  
  179.         // ISO ASN.1
  180.         AsnSequence          sequence;
  181.  
  182.         // RFC 1155 ApplicationSyntax
  183.         AsnIPAddress         address;
  184.         AsnCounter           counter;
  185.         AsnGauge             gauge;
  186.         AsnTimeticks         ticks;
  187.         AsnOpaque            arbitrary;
  188.     } asnValue;
  189. } AsnAny;
  190.  
  191. typedef AsnObjectIdentifier AsnObjectName;
  192. typedef AsnAny              AsnObjectSyntax;
  193. typedef AsnIPAddress        AsnNetworkAddress;
  194.  
  195. typedef struct vb {
  196.     AsnObjectName   name;
  197.     AsnObjectSyntax value;
  198. } RFC1157VarBind;
  199.  
  200. typedef struct {
  201.     RFC1157VarBind *list;
  202.     UINT           len;
  203. } RFC1157VarBindList;
  204.  
  205. typedef struct {
  206.     RFC1157VarBindList varBinds;
  207.     AsnInteger         requestType;
  208.     AsnInteger         requestId;
  209.     AsnInteger         errorStatus;
  210.     AsnInteger         errorIndex;
  211. } RFC1157Pdu;
  212.  
  213. typedef struct {
  214.     RFC1157VarBindList  varBinds;
  215.     AsnObjectIdentifier enterprise;
  216.     AsnNetworkAddress   agentAddr;
  217.     AsnInteger          genericTrap;
  218.     AsnInteger          specificTrap;
  219.     AsnTimeticks        timeStamp;
  220. } RFC1157TrapPdu;
  221.  
  222. typedef struct {
  223.    BYTE pduType;
  224.    union {
  225.       RFC1157Pdu     pdu;
  226.       RFC1157TrapPdu trap;
  227.    } pduValue;
  228. } RFC1157Pdus;
  229.  
  230. typedef struct {
  231.     AsnObjectIdentifier dstParty;
  232.     AsnObjectIdentifier srcParty;
  233.     RFC1157Pdus pdu;
  234.     AsnOctetString community; // This is temporary
  235. } SnmpMgmtCom;
  236.  
  237.  
  238.  
  239. //
  240. // SNMP Utility Prototypes
  241. //
  242.  
  243.  
  244. // Preferred names for the APIs, prototypes following may change in future.
  245.  
  246. #define SnmpUtilOidCpy(a,b)      SNMP_oidcpy(a,b)
  247. #define SnmpUtilOidAppend(a,b)   SNMP_oidappend(a,b)
  248. #define SnmpUtilOidNCmp(a,b,c)   SNMP_oidncmp(a,b,c)
  249. #define SnmpUtilOidCmp(a,b)      SNMP_oidcmp(a,b)
  250. #define SnmpUtilOidFree(a)       SNMP_oidfree(a)
  251.  
  252. #define SnmpUtilVarBindListCpy(a,b)  SNMP_CopyVarBindList(a,b)
  253. #define SnmpUtilVarBindCpy(a,b)      SNMP_CopyVarBind(a,b)
  254. #define SnmpUtilVarBindListFree(a)   SNMP_FreeVarBindList(a)
  255. #define SnmpUtilVarBindFree(a)       SNMP_FreeVarBind(a)
  256.  
  257. #define SnmpUtilPrintAsnAny(a)   SNMP_printany(a)
  258.  
  259. #ifdef SNMPDBG
  260. #define SNMP_free(x)   SNMP_DBG_free(x, __LINE__, __FILE__)
  261. #define SNMP_malloc(x) SNMP_DBG_malloc(x, __LINE__, __FILE__)
  262. #define SNMP_realloc(x, y)  SNMP_DBG_realloc(x, y, __LINE__, __FILE__)
  263. #else
  264. #define SNMP_free(x)   free(x)
  265. #define SNMP_malloc(x) malloc(x)
  266. #define SNMP_realloc(x, y)  realloc(x, y)
  267. #endif
  268.  
  269. void
  270. SNMP_FUNC_TYPE SNMP_DBG_free(
  271.     IN void *x,
  272.     IN int line,
  273.     IN char *file
  274.     );
  275.  
  276. void *
  277. SNMP_FUNC_TYPE SNMP_DBG_malloc(
  278.     IN unsigned int x,
  279.     IN int line,
  280.     IN char *file
  281.     );
  282.  
  283. void *
  284. SNMP_FUNC_TYPE SNMP_DBG_realloc(
  285.     IN void *x,
  286.     IN unsigned int y,
  287.     IN int line,
  288.     IN char *file
  289.     );
  290.  
  291. SNMPAPI
  292. SNMP_FUNC_TYPE SNMP_oidcpy(
  293.     OUT AsnObjectIdentifier *DestObjId, // Destination OID
  294.     IN AsnObjectIdentifier *SrcObjId    // Source OID
  295.     );
  296.  
  297. SNMPAPI
  298. SNMP_FUNC_TYPE SNMP_oidappend(
  299.     IN OUT AsnObjectIdentifier *DestObjId, // Destination OID
  300.     IN AsnObjectIdentifier *SrcObjId       // Source OID
  301.     );
  302.  
  303. SNMPAPI
  304. SNMP_FUNC_TYPE SNMP_oidncmp(
  305.     IN AsnObjectIdentifier *A, // First OID
  306.     IN AsnObjectIdentifier *B, // Second OID
  307.     IN UINT Len                // Max len to compare
  308.     );
  309.  
  310. #define SNMP_oidcmp(A,B) SNMP_oidncmp(A,B,max((A)->idLength,(B)->idLength))
  311.  
  312. void
  313. SNMP_FUNC_TYPE SNMP_oidfree(
  314.     IN OUT AsnObjectIdentifier *Obj // OID to free
  315.     );
  316.  
  317. SNMPAPI
  318. SNMP_FUNC_TYPE SNMP_CopyVarBindList(
  319.     RFC1157VarBindList *dst, // Destination var bind list
  320.     RFC1157VarBindList *src  // Source var bind list
  321.     );
  322.  
  323. SNMPAPI
  324. SNMP_FUNC_TYPE SNMP_CopyVarBind(
  325.     RFC1157VarBind *dst, // Destination var bind
  326.     RFC1157VarBind *src  // Source var bind
  327.     );
  328.  
  329.  
  330. void
  331. SNMP_FUNC_TYPE SNMP_FreeVarBindList(
  332.     RFC1157VarBindList *VarBindList // Variable bindings list to free
  333.     );
  334.  
  335. void
  336. SNMP_FUNC_TYPE SNMP_FreeVarBind(
  337.     RFC1157VarBind *VarBind // Variable binding to free
  338.     );
  339.  
  340.  
  341. void
  342. SNMP_FUNC_TYPE SNMP_printany(
  343.     IN AsnAny *Any
  344.     );
  345.  
  346.  
  347. #endif /* snmp_h */
  348.  
  349.