1 /***********************************************************************\ 2 * snmp.d * 3 * * 4 * Windows API header module * 5 * * 6 * Translated from MinGW Windows headers * 7 * by Stewart Gordon * 8 * * 9 * Placed into public domain * 10 \***********************************************************************/ 11 module win32.snmp; 12 version(Windows): 13 14 private import win32.windows; 15 16 // These are not documented on MSDN 17 enum { 18 DEFAULT_SNMP_PORT_UDP = 161, 19 DEFAULT_SNMP_PORT_IPX = 36879, 20 DEFAULT_SNMPTRAP_PORT_UDP = 162, 21 DEFAULT_SNMPTRAP_PORT_IPX = 36880 22 } 23 24 enum : BYTE { 25 ASN_UNIVERSAL = 0x00, 26 ASN_PRIMITIVE = 0x00, 27 ASN_CONSTRUCTOR = 0x20, 28 ASN_APPLICATION = 0x40, 29 ASN_CONTEXT = 0x80, 30 ASN_PRIVATE = 0xC0, 31 32 SNMP_PDU_GET = ASN_CONTEXT | ASN_CONSTRUCTOR, 33 SNMP_PDU_GETNEXT, 34 SNMP_PDU_RESPONSE, 35 SNMP_PDU_SET, 36 SNMP_PDU_GETBULK, // = ASN_CONTEXT | ASN_CONSTRUCTOR | 4 37 SNMP_PDU_V1TRAP = ASN_CONTEXT | ASN_CONSTRUCTOR | 4, 38 SNMP_PDU_INFORM = ASN_CONTEXT | ASN_CONSTRUCTOR | 6, 39 SNMP_PDU_TRAP, 40 SNMP_PDU_REPORT, 41 ASN_INTEGER = ASN_UNIVERSAL | ASN_PRIMITIVE | 2, 42 ASN_BITS, 43 ASN_OCTETSTRING, 44 ASN_NULL, 45 ASN_OBJECTIDENTIFIER, // = ASN_UNIVERSAL | ASN_PRIMITIVE | 6 46 ASN_INTEGER32 = ASN_INTEGER, 47 ASN_SEQUENCE = ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10, 48 ASN_SEQUENCEOF = ASN_SEQUENCE, 49 ASN_IPADDRESS = ASN_APPLICATION | ASN_PRIMITIVE, 50 ASN_COUNTER32, 51 ASN_GAUGE32, 52 ASN_TIMETICKS, 53 ASN_OPAQUE, // = ASN_APPLICATION | ASN_PRIMITIVE | 4 54 ASN_COUNTER64 = ASN_APPLICATION | ASN_PRIMITIVE | 6, 55 ASN_UNSIGNED32, // = ASN_APPLICATION | ASN_PRIMITIVE | 7 56 SNMP_EXCEPTION_NOSUCHOBJECT = ASN_CONTEXT | ASN_PRIMITIVE, 57 SNMP_EXCEPTION_NOSUCHINSTANCE, 58 SNMP_EXCEPTION_ENDOFMIBVIEW, 59 SNMP_EXTENSION_GET = SNMP_PDU_GET, 60 SNMP_EXTENSION_GET_NEXT = SNMP_PDU_GETNEXT, 61 SNMP_EXTENSION_GET_BULK = SNMP_PDU_GETBULK, 62 SNMP_EXTENSION_SET_TEST = ASN_PRIVATE | ASN_CONSTRUCTOR, 63 SNMP_EXTENSION_SET_COMMIT = SNMP_PDU_SET, 64 SNMP_EXTENSION_SET_UNDO = ASN_PRIVATE | ASN_CONSTRUCTOR | 1, 65 SNMP_EXTENSION_SET_CLEANUP 66 } 67 68 69 enum : AsnInteger { 70 SNMP_ERRORSTATUS_NOERROR, 71 SNMP_ERRORSTATUS_TOOBIG, 72 SNMP_ERRORSTATUS_NOSUCHNAME, 73 SNMP_ERRORSTATUS_BADVALUE, 74 SNMP_ERRORSTATUS_READONLY, 75 SNMP_ERRORSTATUS_GENERR, 76 SNMP_ERRORSTATUS_NOACCESS, 77 SNMP_ERRORSTATUS_WRONGTYPE, 78 SNMP_ERRORSTATUS_WRONGLENGTH, 79 SNMP_ERRORSTATUS_WRONGENCODING, 80 SNMP_ERRORSTATUS_WRONGVALUE, 81 SNMP_ERRORSTATUS_NOCREATION, 82 SNMP_ERRORSTATUS_INCONSISTENTVALUE, 83 SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE, 84 SNMP_ERRORSTATUS_COMMITFAILED, 85 SNMP_ERRORSTATUS_UNDOFAILED, 86 SNMP_ERRORSTATUS_AUTHORIZATIONERROR, 87 SNMP_ERRORSTATUS_NOTWRITABLE, 88 SNMP_ERRORSTATUS_INCONSISTENTNAME 89 } 90 91 enum : AsnInteger { 92 SNMP_GENERICTRAP_COLDSTART, 93 SNMP_GENERICTRAP_WARMSTART, 94 SNMP_GENERICTRAP_LINKDOWN, 95 SNMP_GENERICTRAP_LINKUP, 96 SNMP_GENERICTRAP_AUTHFAILURE, 97 SNMP_GENERICTRAP_EGPNEIGHLOSS, 98 SNMP_GENERICTRAP_ENTERSPECIFIC 99 } 100 101 // These are not documented on MSDN 102 enum { 103 SNMP_ACCESS_NONE, 104 SNMP_ACCESS_NOTIFY, 105 SNMP_ACCESS_READ_ONLY, 106 SNMP_ACCESS_READ_WRITE, 107 SNMP_ACCESS_READ_CREATE 108 } 109 110 enum : BOOL { 111 SNMPAPI_ERROR = false, 112 SNMPAPI_NOERROR = true 113 } 114 115 enum : INT { 116 SNMP_LOG_SILENT, 117 SNMP_LOG_FATAL, 118 SNMP_LOG_ERROR, 119 SNMP_LOG_WARNING, 120 SNMP_LOG_TRACE, 121 SNMP_LOG_VERBOSE 122 } 123 124 const INT 125 SNMP_OUTPUT_TO_CONSOLE = 1, 126 SNMP_OUTPUT_TO_LOGFILE = 2, 127 SNMP_OUTPUT_TO_EVENTLOG = 4, 128 SNMP_OUTPUT_TO_DEBUGGER = 8; 129 130 const size_t SNMP_MAX_OID_LEN = 128; 131 132 enum : DWORD { 133 SNMP_MEM_ALLOC_ERROR = 1, 134 SNMP_BERAPI_INVALID_LENGTH = 10, 135 SNMP_BERAPI_INVALID_TAG, 136 SNMP_BERAPI_OVERFLOW, 137 SNMP_BERAPI_SHORT_BUFFER, 138 SNMP_BERAPI_INVALID_OBJELEM, 139 SNMP_PDUAPI_UNRECOGNIZED_PDU = 20, 140 SNMP_PDUAPI_INVALID_ES, 141 SNMP_PDUAPI_INVALID_GT, 142 SNMP_AUTHAPI_INVALID_VERSION = 30, 143 SNMP_AUTHAPI_INVALID_MSG_TYPE, 144 SNMP_AUTHAPI_TRIV_AUTH_FAILED, 145 } 146 147 alias INT SNMPAPI; 148 alias LONG AsnInteger32; 149 alias ULONG AsnUnsigned32, AsnCounter32, AsnGauge32, AsnTimeticks; 150 alias ULARGE_INTEGER AsnCounter64; 151 152 align (4): 153 154 struct AsnOctetString { 155 BYTE* stream; 156 UINT length; 157 BOOL dynamic; 158 } 159 alias AsnOctetString AsnBits, AsnSequence, AsnImplicitSequence, 160 AsnIPAddress, AsnNetworkAddress, AsnDisplayString, AsnOpaque; 161 162 struct AsnObjectIdentifier { 163 UINT idLength; 164 UINT* ids; 165 } 166 alias AsnObjectIdentifier AsnObjectName; 167 168 struct AsnAny { 169 BYTE asnType; 170 union _asnValue { 171 AsnInteger32 number; 172 AsnUnsigned32 unsigned32; 173 AsnCounter64 counter64; 174 AsnOctetString string; 175 AsnBits bits; 176 AsnObjectIdentifier object; 177 AsnSequence sequence; 178 AsnIPAddress address; 179 AsnCounter32 counter; 180 AsnGauge32 gauge; 181 AsnTimeticks ticks; 182 AsnOpaque arbitrary; 183 } 184 _asnValue asnValue; 185 } 186 alias AsnAny AsnObjectSyntax; 187 188 struct SnmpVarBind { 189 AsnObjectName name; 190 AsnObjectSyntax value; 191 } 192 193 struct SnmpVarBindList { 194 SnmpVarBind* list; 195 UINT len; 196 } 197 198 extern (Windows) { 199 VOID SnmpExtensionClose(); 200 BOOL SnmpExtensionInit(DWORD, HANDLE*, AsnObjectIdentifier*); 201 BOOL SnmpExtensionInitEx(AsnObjectIdentifier*); 202 BOOL SnmpExtensionMonitor(LPVOID); 203 BOOL SnmpExtensionQuery(BYTE, SnmpVarBindList*, AsnInteger32*, 204 AsnInteger32*); 205 BOOL SnmpExtensionQueryEx(DWORD, DWORD, SnmpVarBindList*, AsnOctetString*, 206 AsnInteger32*, AsnInteger32*); 207 BOOL SnmpExtensionTrap(AsnObjectIdentifier*, AsnInteger32*, AsnInteger32*, 208 AsnTimeticks*, SnmpVarBindList*); 209 DWORD SnmpSvcGetUptime(); 210 VOID SnmpSvcSetLogLevel(INT); 211 VOID SnmpSvcSetLogType(INT); 212 SNMPAPI SnmpUtilAsnAnyCpy(AsnAny*, AsnAny*); 213 VOID SnmpUtilAsnAnyFree(AsnAny*); 214 VOID SnmpUtilDbgPrint(INT, LPSTR, ...); 215 LPSTR SnmpUtilIdsToA(UINT*, UINT); 216 LPVOID SnmpUtilMemAlloc(UINT); 217 VOID SnmpUtilMemFree(LPVOID); 218 LPVOID SnmpUtilMemReAlloc(LPVOID, UINT); 219 SNMPAPI SnmpUtilOctetsCmp(AsnOctetString*, AsnOctetString*); 220 SNMPAPI SnmpUtilOctetsCpy(AsnOctetString*, AsnOctetString*); 221 VOID SnmpUtilOctetsFree(AsnOctetString*); 222 SNMPAPI SnmpUtilOctetsNCmp(AsnOctetString*, AsnOctetString*, UINT); 223 SNMPAPI SnmpUtilOidAppend(AsnObjectIdentifier*, AsnObjectIdentifier*); 224 SNMPAPI SnmpUtilOidCmp(AsnObjectIdentifier*, AsnObjectIdentifier*); 225 SNMPAPI SnmpUtilOidCpy(AsnObjectIdentifier*, AsnObjectIdentifier*); 226 VOID SnmpUtilOidFree(AsnObjectIdentifier*); 227 SNMPAPI SnmpUtilOidNCmp(AsnObjectIdentifier*, AsnObjectIdentifier*, UINT); 228 LPSTR SnmpUtilOidToA(AsnObjectIdentifier*); 229 VOID SnmpUtilPrintAsnAny(AsnAny*); 230 VOID SnmpUtilPrintOid(AsnObjectIdentifier*); 231 SNMPAPI SnmpUtilVarBindCpy(SnmpVarBind*, SnmpVarBind*); 232 SNMPAPI SnmpUtilVarBindListCpy(SnmpVarBindList*, SnmpVarBindList*); 233 VOID SnmpUtilVarBindFree(SnmpVarBind*); 234 VOID SnmpUtilVarBindListFree(SnmpVarBindList*); 235 } 236 237 alias SnmpUtilMemAlloc SNMP_malloc; 238 alias SnmpUtilMemFree SNMP_free; 239 alias SnmpUtilMemReAlloc SNMP_realloc; 240 alias SnmpUtilMemAlloc SNMP_DBG_malloc; 241 alias SnmpUtilMemFree SNMP_DBG_free; 242 alias SnmpUtilMemReAlloc SNMP_DBG_realloc; 243 alias SnmpUtilOidAppend SNMP_oidappend; 244 alias SnmpUtilOidCmp SNMP_oidcmp; 245 alias SnmpUtilOidCpy SNMP_oidcpy; 246 alias SnmpUtilOidFree SNMP_oidfree; 247 alias SnmpUtilOidNCmp SNMP_oidncmp; 248 alias SnmpUtilPrintAsnAny SNMP_printany; 249 alias SnmpUtilVarBindCpy SNMP_CopyVarBind; 250 alias SnmpUtilVarBindListCpy SNMP_CopyVarBindList; 251 alias SnmpUtilVarBindFree SNMP_FreeVarBind; 252 alias SnmpUtilVarBindListFree SNMP_FreeVarBindList; 253 alias ASN_IPADDRESS ASN_RFC1155_IPADDRESS; 254 alias ASN_COUNTER32 ASN_RFC1155_COUNTER; 255 alias ASN_GAUGE32 ASN_RFC1155_GAUGE; 256 alias ASN_TIMETICKS ASN_RFC1155_TIMETICKS; 257 alias ASN_OPAQUE ASN_RFC1155_OPAQUE; 258 alias ASN_OCTETSTRING ASN_RFC1213_DISPSTRING; 259 alias SNMP_PDU_GET ASN_RFC1157_GETREQUEST; 260 alias SNMP_PDU_GETNEXT ASN_RFC1157_GETNEXTREQUEST; 261 alias SNMP_PDU_RESPONSE ASN_RFC1157_GETRESPONSE; 262 alias SNMP_PDU_SET ASN_RFC1157_SETREQUEST; 263 alias SNMP_PDU_V1TRAP ASN_RFC1157_TRAP; 264 alias ASN_CONTEXT ASN_CONTEXTSPECIFIC; 265 alias ASN_PRIMITIVE ASN_PRIMATIVE; 266 alias SnmpVarBindList RFC1157VarBindList; 267 alias SnmpVarBind RFC1157VarBind; 268 alias AsnInteger32 AsnInteger; 269 alias AsnCounter32 AsnCounter; 270 alias AsnGauge32 AsnGauge;