Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

400 lines
16 KiB

  1. /*++
  2. Copyright (c) 1996 Microsoft Corporation
  3. Module Name:
  4. snmpexts.h
  5. Abstract:
  6. Definitions for SNMP extension agents.
  7. --*/
  8. #ifndef _INC_SNMPEXTS_
  9. #define _INC_SNMPEXTS_
  10. ///////////////////////////////////////////////////////////////////////////////
  11. // //
  12. // Mib version //
  13. // //
  14. ///////////////////////////////////////////////////////////////////////////////
  15. #define MIB_VERSION 0x01 // increment if structure changes
  16. ///////////////////////////////////////////////////////////////////////////////
  17. // //
  18. // Mib view types (use opaque if SnmpExtensionQuery preferred) //
  19. // //
  20. ///////////////////////////////////////////////////////////////////////////////
  21. #define MIB_VIEW_NORMAL 0x01 // callback via mib structure
  22. #define MIB_VIEW_OPAQUE 0x02 // call directly with varbinds
  23. ///////////////////////////////////////////////////////////////////////////////
  24. // //
  25. // Mib entry access types //
  26. // //
  27. ///////////////////////////////////////////////////////////////////////////////
  28. #define MIB_ACCESS_NONE 0x00 // entry not accessible
  29. #define MIB_ACCESS_READ 0x01 // entry can be read
  30. #define MIB_ACCESS_WRITE 0x02 // entry can be written
  31. #define MIB_ACCESS_ALL 0x03 // entry can be read and written
  32. ///////////////////////////////////////////////////////////////////////////////
  33. // //
  34. // Mib callback request types //
  35. // //
  36. ///////////////////////////////////////////////////////////////////////////////
  37. #define MIB_ACTION_SET ASN_RFC1157_SETREQUEST
  38. #define MIB_ACTION_GET ASN_RFC1157_GETREQUEST
  39. #define MIB_ACTION_GETNEXT ASN_RFC1157_GETNEXTREQUEST
  40. #define MIB_ACTION_GETFIRST (ASN_PRIVATE|ASN_CONSTRUCTOR|0x00)
  41. #define MIB_ACTION_VALIDATE (ASN_PRIVATE|ASN_CONSTRUCTOR|0x01)
  42. #define MIB_ACTION_CLEANUP (ASN_PRIVATE|ASN_CONSTRUCTOR|0x02)
  43. ///////////////////////////////////////////////////////////////////////////////
  44. // //
  45. // Callback definitions //
  46. // //
  47. ///////////////////////////////////////////////////////////////////////////////
  48. typedef UINT (* MIB_ACTION_FUNC)(
  49. IN UINT actionId, // action requested
  50. IN OUT AsnAny * objectArray, // array of variables
  51. OUT UINT * errorIndex // index of item in error
  52. );
  53. typedef UINT (* MIB_EVENT_FUNC)(); // event callback
  54. #define MIB_S_SUCCESS ERROR_SUCCESS
  55. #define MIB_S_NOT_SUPPORTED ERROR_NOT_SUPPORTED
  56. #define MIB_S_NO_MORE_ENTRIES ERROR_NO_MORE_ITEMS
  57. #define MIB_S_ENTRY_NOT_FOUND ERROR_FILE_NOT_FOUND
  58. #define MIB_S_INVALID_PARAMETER ERROR_INVALID_PARAMETER
  59. ///////////////////////////////////////////////////////////////////////////////
  60. // //
  61. // Mib entry definition //
  62. // //
  63. ///////////////////////////////////////////////////////////////////////////////
  64. typedef struct _SnmpMibEntry {
  65. AsnObjectIdentifier mibOid; // relative oid
  66. UCHAR mibType; // asn scalar type
  67. UCHAR mibAccess; // mib access type
  68. UCHAR mibGetBufOff; // index into get array
  69. UCHAR mibSetBufOff; // index into set array
  70. USHORT mibGetBufLen; // total size of get array
  71. USHORT mibSetBufLen; // total size of set array
  72. MIB_ACTION_FUNC mibGetFunc; // user-supplied callback
  73. MIB_ACTION_FUNC mibSetFunc; // user-supplied callback
  74. INT mibMinimum; // minimum value allowed
  75. INT mibMaximum; // maximum value allowed
  76. } SnmpMibEntry;
  77. typedef struct _SnmpMibEntryList {
  78. SnmpMibEntry * list; // list of mib entries
  79. UINT len; // list length
  80. } SnmpMibEntryList;
  81. ///////////////////////////////////////////////////////////////////////////////
  82. // //
  83. // Mib table definition //
  84. // //
  85. ///////////////////////////////////////////////////////////////////////////////
  86. typedef struct _SnmpMibTable {
  87. UINT numColumns; // number of table entries
  88. UINT numIndices; // number of table indices
  89. SnmpMibEntry * tableEntry; // pointer to table root
  90. SnmpMibEntry ** tableIndices; // pointer to index indices
  91. } SnmpMibTable;
  92. typedef struct _SnmpMibTableList {
  93. SnmpMibTable * list; // list of mib tables
  94. UINT len; // list length
  95. } SnmpMibTableList;
  96. ///////////////////////////////////////////////////////////////////////////////
  97. // //
  98. // Mib view definition //
  99. // //
  100. ///////////////////////////////////////////////////////////////////////////////
  101. typedef struct _SnmpMibView {
  102. DWORD viewVersion; // structure version
  103. DWORD viewType; // opaque or normal
  104. AsnObjectIdentifier viewOid; // root oid of view
  105. SnmpMibEntryList viewScalars; // list of entries
  106. SnmpMibTableList viewTables; // list of tables
  107. } SnmpMibView;
  108. typedef struct _SnmpMibViewList {
  109. SnmpMibView * list; // list of supported views
  110. UINT len; // list length
  111. } SnmpMibViewList;
  112. ///////////////////////////////////////////////////////////////////////////////
  113. // //
  114. // Mib event definition //
  115. // //
  116. ///////////////////////////////////////////////////////////////////////////////
  117. typedef struct _SnmpMibEvent {
  118. HANDLE event; // subagent event handle
  119. MIB_EVENT_FUNC eventFunc; // subagent event callback
  120. } SnmpMibEvent;
  121. typedef struct _SnmpMibEventList {
  122. SnmpMibEvent * list; // list of supported events
  123. UINT len; // list length
  124. } SnmpMibEventList;
  125. ///////////////////////////////////////////////////////////////////////////////
  126. // //
  127. // Extension agent framework functions //
  128. // //
  129. ///////////////////////////////////////////////////////////////////////////////
  130. typedef LPVOID SnmpTfxHandle;
  131. SnmpTfxHandle
  132. SNMP_FUNC_TYPE
  133. SnmpTfxOpen(
  134. DWORD numViews,
  135. SnmpMibView * supportedViews
  136. );
  137. BOOL
  138. SNMP_FUNC_TYPE
  139. SnmpTfxQuery(
  140. SnmpTfxHandle tfxHandle,
  141. BYTE requestType,
  142. RFC1157VarBindList * vbl,
  143. AsnInteger * errorStatus,
  144. AsnInteger * errorIndex
  145. );
  146. VOID
  147. SNMP_FUNC_TYPE
  148. SnmpTfxClose(
  149. SnmpTfxHandle tfxHandle
  150. );
  151. ///////////////////////////////////////////////////////////////////////////////
  152. // //
  153. // Other definitions //
  154. // //
  155. ///////////////////////////////////////////////////////////////////////////////
  156. #define ASN_PRIVATE_EOM (ASN_PRIVATE|ASN_PRIMATIVE|0x00)
  157. #define ASN_PRIVATE_NODE (ASN_PRIVATE|ASN_PRIMATIVE|0x01)
  158. #define IDS_SIZEOF(ids) (sizeof(ids)/sizeof(UINT))
  159. #define MIB_OID(ids) {IDS_SIZEOF(ids),(ids)}
  160. #define ELIST_SIZEOF(x) (sizeof(x)/sizeof(SnmpMibEntry))
  161. #define MIB_ENTRIES(x) {(x),ELIST_SIZEOF(x)}
  162. #define TLIST_SIZEOF(x) (sizeof(x)/sizeof(SnmpMibTable))
  163. #define MIB_TABLES(x) {(x),TLIST_SIZEOF(x)}
  164. #define MIB_ADDR(x) (&(x))
  165. #define MIB_ID(x) x
  166. #define MIB_VIEW(x) \
  167. {MIB_VERSION, \
  168. MIB_VIEW_NORMAL, \
  169. MIB_OID(ids_ ## x), \
  170. MIB_ENTRIES(mib_ ## x), \
  171. MIB_TABLES(tbl_ ## x)}
  172. #define MIB_GROUP(x) \
  173. {MIB_OID(ids_ ## x), \
  174. ASN_PRIVATE_NODE, \
  175. MIB_ACCESS_NONE, \
  176. 0, \
  177. 0, \
  178. 0, \
  179. 0, \
  180. NULL, \
  181. NULL, \
  182. 0, \
  183. 0}
  184. #define MIB_END() \
  185. {{0,NULL}, \
  186. ASN_PRIVATE_EOM, \
  187. MIB_ACCESS_NONE, \
  188. 0, \
  189. 0, \
  190. 0, \
  191. 0, \
  192. NULL, \
  193. NULL, \
  194. 0, \
  195. 0}
  196. #define MIB_ROOT(x) MIB_GROUP(x)
  197. #define MIB_TABLE_ROOT(x) MIB_GROUP(x)
  198. #define MIB_TABLE_ENTRY(x) MIB_GROUP(x)
  199. #define MIB_OFFSET(x,y) (((UINT_PTR)&(((x *)0)->y))/sizeof(AsnAny))
  200. #define MIB_OFFSET_GB(x) MIB_OFFSET(MIB_ID(gb_ ## x),x)
  201. #define MIB_OFFSET_SB(x) MIB_OFFSET(MIB_ID(sb_ ## x),x)
  202. #define MIB_SIZEOF_GB(x) sizeof(MIB_ID(gb_ ## x))
  203. #define MIB_SIZEOF_SB(x) sizeof(MIB_ID(sb_ ## x))
  204. #define MIB_ANY_RO_L(x,y,a,z) \
  205. {MIB_OID(ids_ ## x), \
  206. y, \
  207. MIB_ACCESS_READ, \
  208. MIB_OFFSET_GB(x), \
  209. 0, \
  210. MIB_SIZEOF_GB(x), \
  211. 0, \
  212. MIB_ID(gf_ ## x), \
  213. NULL, \
  214. a, \
  215. z}
  216. #define MIB_ANY_RW_L(x,y,a,z) \
  217. {MIB_OID(ids_ ## x), \
  218. y, \
  219. MIB_ACCESS_ALL, \
  220. MIB_OFFSET_GB(x), \
  221. MIB_OFFSET_SB(x), \
  222. MIB_SIZEOF_GB(x), \
  223. MIB_SIZEOF_SB(x), \
  224. MIB_ID(gf_ ## x), \
  225. MIB_ID(sf_ ## x), \
  226. a, \
  227. z}
  228. #define MIB_ANY_NA_L(x,y,a,z) \
  229. {MIB_OID(ids_ ## x), \
  230. y, \
  231. MIB_ACCESS_NONE, \
  232. MIB_OFFSET_GB(x), \
  233. 0, \
  234. MIB_SIZEOF_GB(x), \
  235. 0, \
  236. NULL, \
  237. NULL, \
  238. a, \
  239. z}
  240. #define MIB_ANY_AC_L(x,y,a,z) \
  241. {MIB_OID(ids_ ## x), \
  242. y, \
  243. MIB_ACCESS_NONE, \
  244. MIB_OFFSET_GB(x), \
  245. MIB_OFFSET_SB(x), \
  246. MIB_SIZEOF_GB(x), \
  247. MIB_SIZEOF_SB(x), \
  248. NULL, \
  249. NULL, \
  250. a, \
  251. z}
  252. #define MIB_ANY_RO(x,y) MIB_ANY_RO_L(x,y,0,0)
  253. #define MIB_ANY_RW(x,y) MIB_ANY_RW_L(x,y,0,0)
  254. #define MIB_ANY_NA(x,y) MIB_ANY_NA_L(x,y,0,0)
  255. #define MIB_ANY_AC(x,y) MIB_ANY_AC_L(x,y,0,0)
  256. #define MIB_INTEGER(x) MIB_ANY_RO(x,ASN_INTEGER)
  257. #define MIB_OCTETSTRING(x) MIB_ANY_RO(x,ASN_OCTETSTRING)
  258. #define MIB_OBJECTIDENTIFIER(x) MIB_ANY_RO(x,ASN_OBJECTIDENTIFIER)
  259. #define MIB_IPADDRESS(x) MIB_ANY_RO(x,ASN_RFC1155_IPADDRESS)
  260. #define MIB_COUNTER(x) MIB_ANY_RO(x,ASN_RFC1155_COUNTER)
  261. #define MIB_GAUGE(x) MIB_ANY_RO(x,ASN_RFC1155_GAUGE)
  262. #define MIB_TIMETICKS(x) MIB_ANY_RO(x,ASN_RFC1155_TIMETICKS)
  263. #define MIB_OPAQUE(x) MIB_ANY_RO(x,ASN_RFC1155_OPAQUE)
  264. #define MIB_DISPSTRING(x) MIB_ANY_RO(x,ASN_RFC1213_DISPSTRING)
  265. #define MIB_PHYSADDRESS(x) MIB_ANY_RO(x,ASN_OCTETSTRING)
  266. #define MIB_INTEGER_RW(x) MIB_ANY_RW(x,ASN_INTEGER)
  267. #define MIB_OCTETSTRING_RW(x) MIB_ANY_RW(x,ASN_OCTETSTRING)
  268. #define MIB_OBJECTIDENTIFIER_RW(x) MIB_ANY_RW(x,ASN_OBJECTIDENTIFIER)
  269. #define MIB_IPADDRESS_RW(x) MIB_ANY_RW(x,ASN_RFC1155_IPADDRESS)
  270. #define MIB_COUNTER_RW(x) MIB_ANY_RW(x,ASN_RFC1155_COUNTER)
  271. #define MIB_GAUGE_RW(x) MIB_ANY_RW(x,ASN_RFC1155_GAUGE)
  272. #define MIB_TIMETICKS_RW(x) MIB_ANY_RW(x,ASN_RFC1155_TIMETICKS)
  273. #define MIB_OPAQUE_RW(x) MIB_ANY_RW(x,ASN_RFC1155_OPAQUE)
  274. #define MIB_DISPSTRING_RW(x) MIB_ANY_RW(x,ASN_RFC1213_DISPSTRING)
  275. #define MIB_PHYSADDRESS_RW(x) MIB_ANY_RW(x,ASN_OCTETSTRING)
  276. #define MIB_INTEGER_NA(x) MIB_ANY_NA(x,ASN_INTEGER)
  277. #define MIB_OCTETSTRING_NA(x) MIB_ANY_NA(x,ASN_OCTETSTRING)
  278. #define MIB_OBJECTIDENTIFIER_NA(x) MIB_ANY_NA(x,ASN_OBJECTIDENTIFIER)
  279. #define MIB_IPADDRESS_NA(x) MIB_ANY_NA(x,ASN_RFC1155_IPADDRESS)
  280. #define MIB_COUNTER_NA(x) MIB_ANY_NA(x,ASN_RFC1155_COUNTER)
  281. #define MIB_GAUGE_NA(x) MIB_ANY_NA(x,ASN_RFC1155_GAUGE)
  282. #define MIB_TIMETICKS_NA(x) MIB_ANY_NA(x,ASN_RFC1155_TIMETICKS)
  283. #define MIB_OPAQUE_NA(x) MIB_ANY_NA(x,ASN_RFC1155_OPAQUE)
  284. #define MIB_DISPSTRING_NA(x) MIB_ANY_NA(x,ASN_RFC1213_DISPSTRING)
  285. #define MIB_PHYSADDRESS_NA(x) MIB_ANY_NA(x,ASN_OCTETSTRING)
  286. #define MIB_INTEGER_AC(x) MIB_ANY_AC(x,ASN_INTEGER)
  287. #define MIB_OCTETSTRING_AC(x) MIB_ANY_AC(x,ASN_OCTETSTRING)
  288. #define MIB_OBJECTIDENTIFIER_AC(x) MIB_ANY_AC(x,ASN_OBJECTIDENTIFIER)
  289. #define MIB_IPADDRESS_AC(x) MIB_ANY_AC(x,ASN_RFC1155_IPADDRESS)
  290. #define MIB_COUNTER_AC(x) MIB_ANY_AC(x,ASN_RFC1155_COUNTER)
  291. #define MIB_GAUGE_AC(x) MIB_ANY_AC(x,ASN_RFC1155_GAUGE)
  292. #define MIB_TIMETICKS_AC(x) MIB_ANY_AC(x,ASN_RFC1155_TIMETICKS)
  293. #define MIB_OPAQUE_AC(x) MIB_ANY_AC(x,ASN_RFC1155_OPAQUE)
  294. #define MIB_DISPSTRING_AC(x) MIB_ANY_AC(x,ASN_RFC1213_DISPSTRING)
  295. #define MIB_PHYSADDRESS_AC(x) MIB_ANY_AC(x,ASN_OCTETSTRING)
  296. #define MIB_INTEGER_L(x,a,z) MIB_ANY_RO_L(x,ASN_INTEGER,a,z)
  297. #define MIB_OCTETSTRING_L(x,a,z) MIB_ANY_RO_L(x,ASN_OCTETSTRING,a,z)
  298. #define MIB_OPAQUE_L(x,a,z) MIB_ANY_RO_L(x,ASN_RFC1155_OPAQUE,a,z)
  299. #define MIB_DISPSTRING_L(x,a,z) MIB_ANY_RO_L(x,ASN_RFC1213_DISPSTRING,a,z)
  300. #define MIB_PHYSADDRESS_L(x,a,z) MIB_ANY_RO_L(x,ASN_OCTETSTRING,a,z)
  301. #define MIB_INTEGER_RW_L(x,a,z) MIB_ANY_RW_L(x,ASN_INTEGER,a,z)
  302. #define MIB_OCTETSTRING_RW_L(x,a,z) MIB_ANY_RW_L(x,ASN_OCTETSTRING,a,z)
  303. #define MIB_OPAQUE_RW_L(x,a,z) MIB_ANY_RW_L(x,ASN_RFC1155_OPAQUE,a,z)
  304. #define MIB_DISPSTRING_RW_L(x,a,z) MIB_ANY_RW_L(x,ASN_RFC1213_DISPSTRING,a,z)
  305. #define MIB_PHYSADDRESS_RW_L(x,a,z) MIB_ANY_RW_L(x,ASN_OCTETSTRING,a,z)
  306. #define MIB_INTEGER_NA_L(x,a,z) MIB_ANY_NA_L(x,ASN_INTEGER,a,z)
  307. #define MIB_OCTETSTRING_NA_L(x,a,z) MIB_ANY_NA_L(x,ASN_OCTETSTRING,a,z)
  308. #define MIB_OPAQUE_NA_L(x,a,z) MIB_ANY_NA_L(x,ASN_RFC1155_OPAQUE,a,z)
  309. #define MIB_DISPSTRING_NA_L(x,a,z) MIB_ANY_NA_L(x,ASN_RFC1213_DISPSTRING,a,z)
  310. #define MIB_PHYSADDRESS_NA_L(x,a,z) MIB_ANY_NA_L(x,ASN_OCTETSTRING,a,z)
  311. #define MIB_INTEGER_AC_L(x,a,z) MIB_ANY_AC_L(x,ASN_INTEGER,a,z)
  312. #define MIB_OCTETSTRING_AC_L(x,a,z) MIB_ANY_AC_L(x,ASN_OCTETSTRING,a,z)
  313. #define MIB_OPAQUE_AC_L(x,a,z) MIB_ANY_AC_L(x,ASN_RFC1155_OPAQUE,a,z)
  314. #define MIB_DISPSTRING_AC_L(x,a,z) MIB_ANY_AC_L(x,ASN_RFC1213_DISPSTRING,a,z)
  315. #define MIB_PHYSADDRESS_AC_L(x,a,z) MIB_ANY_AC_L(x,ASN_OCTETSTRING,a,z)
  316. #define MIB_ENTRY_PTR(x,y) \
  317. MIB_ADDR(MIB_ID(mib_ ## x)[MIB_ID(mi_ ## y)])
  318. #define MIB_TABLE(x,y,z) \
  319. {MIB_ID(ne_ ## y), MIB_ID(ni_ ## y), MIB_ENTRY_PTR(x,y), z}
  320. #define asn_t asnType
  321. #define asn_v asnValue
  322. #define asn_n asnValue.number
  323. #define asn_s asnValue.string
  324. #define asn_sl asnValue.string.length
  325. #define asn_ss asnValue.string.stream
  326. #define asn_sd asnValue.string.dynamic
  327. #define asn_o asnValue.object
  328. #define asn_ol asnValue.object.idLength
  329. #define asn_oi asnValue.object.ids
  330. #define asn_l asnValue.sequence
  331. #define asn_a asnValue.address
  332. #define asn_c asnValue.counter
  333. #define asn_g asnValue.gauge
  334. #define asn_tt asnValue.timeticks
  335. #define asn_x asnValue.arbitrary
  336. #endif // _INC_SNMPEXTS_