1# 2# This file is part of pyasn1-modules software. 3# 4# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> 5# License: http://pyasn1.sf.net/license.html 6# 7# SNMPv2c PDU syntax 8# 9# ASN.1 source from: 10# http://www.ietf.org/rfc/rfc1905.txt 11# 12from pyasn1.type import univ, namedtype, namedval, tag, constraint 13from pyasn1_modules import rfc1902 14 15max_bindings = rfc1902.Integer(2147483647) 16 17 18class _BindValue(univ.Choice): 19 componentType = namedtype.NamedTypes( 20 namedtype.NamedType('value', rfc1902.ObjectSyntax()), 21 namedtype.NamedType('unSpecified', univ.Null()), 22 namedtype.NamedType('noSuchObject', 23 univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 24 namedtype.NamedType('noSuchInstance', 25 univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 26 namedtype.NamedType('endOfMibView', 27 univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))) 28 ) 29 30 31class VarBind(univ.Sequence): 32 componentType = namedtype.NamedTypes( 33 namedtype.NamedType('name', rfc1902.ObjectName()), 34 namedtype.NamedType('', _BindValue()) 35 ) 36 37 38class VarBindList(univ.SequenceOf): 39 componentType = VarBind() 40 subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint( 41 0, max_bindings 42 ) 43 44 45class PDU(univ.Sequence): 46 componentType = namedtype.NamedTypes( 47 namedtype.NamedType('request-id', rfc1902.Integer32()), 48 namedtype.NamedType('error-status', univ.Integer( 49 namedValues=namedval.NamedValues(('noError', 0), ('tooBig', 1), ('noSuchName', 2), ('badValue', 3), 50 ('readOnly', 4), ('genErr', 5), ('noAccess', 6), ('wrongType', 7), 51 ('wrongLength', 8), ('wrongEncoding', 9), ('wrongValue', 10), 52 ('noCreation', 11), ('inconsistentValue', 12), ('resourceUnavailable', 13), 53 ('commitFailed', 14), ('undoFailed', 15), ('authorizationError', 16), 54 ('notWritable', 17), ('inconsistentName', 18)))), 55 namedtype.NamedType('error-index', 56 univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, max_bindings))), 57 namedtype.NamedType('variable-bindings', VarBindList()) 58 ) 59 60 61class BulkPDU(univ.Sequence): 62 componentType = namedtype.NamedTypes( 63 namedtype.NamedType('request-id', rfc1902.Integer32()), 64 namedtype.NamedType('non-repeaters', 65 univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, max_bindings))), 66 namedtype.NamedType('max-repetitions', 67 univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, max_bindings))), 68 namedtype.NamedType('variable-bindings', VarBindList()) 69 ) 70 71 72class GetRequestPDU(PDU): 73 tagSet = PDU.tagSet.tagImplicitly( 74 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0) 75 ) 76 77 78class GetNextRequestPDU(PDU): 79 tagSet = PDU.tagSet.tagImplicitly( 80 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1) 81 ) 82 83 84class ResponsePDU(PDU): 85 tagSet = PDU.tagSet.tagImplicitly( 86 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2) 87 ) 88 89 90class SetRequestPDU(PDU): 91 tagSet = PDU.tagSet.tagImplicitly( 92 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3) 93 ) 94 95 96class GetBulkRequestPDU(BulkPDU): 97 tagSet = PDU.tagSet.tagImplicitly( 98 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5) 99 ) 100 101 102class InformRequestPDU(PDU): 103 tagSet = PDU.tagSet.tagImplicitly( 104 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6) 105 ) 106 107 108class SNMPv2TrapPDU(PDU): 109 tagSet = PDU.tagSet.tagImplicitly( 110 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 7) 111 ) 112 113 114class ReportPDU(PDU): 115 tagSet = PDU.tagSet.tagImplicitly( 116 tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 8) 117 ) 118 119 120class PDUs(univ.Choice): 121 componentType = namedtype.NamedTypes( 122 namedtype.NamedType('get-request', GetRequestPDU()), 123 namedtype.NamedType('get-next-request', GetNextRequestPDU()), 124 namedtype.NamedType('get-bulk-request', GetBulkRequestPDU()), 125 namedtype.NamedType('response', ResponsePDU()), 126 namedtype.NamedType('set-request', SetRequestPDU()), 127 namedtype.NamedType('inform-request', InformRequestPDU()), 128 namedtype.NamedType('snmpV2-trap', SNMPv2TrapPDU()), 129 namedtype.NamedType('report', ReportPDU()) 130 ) 131