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