home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / geninc32.pak / SNMP.H < prev    next >
C/C++ Source or Header  |  1997-07-23  |  9KB  |  351 lines

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