| # | |
| # This file is part of pyasn1-modules software. | |
| # | |
| # Copyright (c) 2005-2019, Ilya Etingof <[email protected]> | |
| # License: http://snmplabs.com/pyasn1/license.html | |
| # | |
| # SNMPv2c PDU syntax | |
| # | |
| # ASN.1 source from: | |
| # http://www.ietf.org/rfc/rfc1905.txt | |
| # | |
| from pyasn1.type import constraint | |
| from pyasn1.type import namedtype | |
| from pyasn1.type import namedval | |
| from pyasn1.type import tag | |
| from pyasn1.type import univ | |
| from pyasn1_modules import rfc1902 | |
| max_bindings = rfc1902.Integer(2147483647) | |
| class _BindValue(univ.Choice): | |
| componentType = namedtype.NamedTypes( | |
| namedtype.NamedType('value', rfc1902.ObjectSyntax()), | |
| namedtype.NamedType('unSpecified', univ.Null()), | |
| namedtype.NamedType('noSuchObject', | |
| univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), | |
| namedtype.NamedType('noSuchInstance', | |
| univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), | |
| namedtype.NamedType('endOfMibView', | |
| univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))) | |
| ) | |
| class VarBind(univ.Sequence): | |
| componentType = namedtype.NamedTypes( | |
| namedtype.NamedType('name', rfc1902.ObjectName()), | |
| namedtype.NamedType('', _BindValue()) | |
| ) | |
| class VarBindList(univ.SequenceOf): | |
| componentType = VarBind() | |
| sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint( | |
| 0, max_bindings | |
| ) | |
| class PDU(univ.Sequence): | |
| componentType = namedtype.NamedTypes( | |
| namedtype.NamedType('request-id', rfc1902.Integer32()), | |
| 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)))), | |
| namedtype.NamedType('error-index', | |
| univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, max_bindings))), | |
| namedtype.NamedType('variable-bindings', VarBindList()) | |
| ) | |
| class BulkPDU(univ.Sequence): | |
| componentType = namedtype.NamedTypes( | |
| namedtype.NamedType('request-id', rfc1902.Integer32()), | |
| namedtype.NamedType('non-repeaters', | |
| univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, max_bindings))), | |
| namedtype.NamedType('max-repetitions', | |
| univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, max_bindings))), | |
| namedtype.NamedType('variable-bindings', VarBindList()) | |
| ) | |
| class GetRequestPDU(PDU): | |
| tagSet = PDU.tagSet.tagImplicitly( | |
| tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0) | |
| ) | |
| class GetNextRequestPDU(PDU): | |
| tagSet = PDU.tagSet.tagImplicitly( | |
| tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1) | |
| ) | |
| class ResponsePDU(PDU): | |
| tagSet = PDU.tagSet.tagImplicitly( | |
| tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2) | |
| ) | |
| class SetRequestPDU(PDU): | |
| tagSet = PDU.tagSet.tagImplicitly( | |
| tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3) | |
| ) | |
| class GetBulkRequestPDU(BulkPDU): | |
| tagSet = PDU.tagSet.tagImplicitly( | |
| tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5) | |
| ) | |
| class InformRequestPDU(PDU): | |
| tagSet = PDU.tagSet.tagImplicitly( | |
| tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6) | |
| ) | |
| class SNMPv2TrapPDU(PDU): | |
| tagSet = PDU.tagSet.tagImplicitly( | |
| tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 7) | |
| ) | |
| class ReportPDU(PDU): | |
| tagSet = PDU.tagSet.tagImplicitly( | |
| tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 8) | |
| ) | |
| class PDUs(univ.Choice): | |
| componentType = namedtype.NamedTypes( | |
| namedtype.NamedType('get-request', GetRequestPDU()), | |
| namedtype.NamedType('get-next-request', GetNextRequestPDU()), | |
| namedtype.NamedType('get-bulk-request', GetBulkRequestPDU()), | |
| namedtype.NamedType('response', ResponsePDU()), | |
| namedtype.NamedType('set-request', SetRequestPDU()), | |
| namedtype.NamedType('inform-request', InformRequestPDU()), | |
| namedtype.NamedType('snmpV2-trap', SNMPv2TrapPDU()), | |
| namedtype.NamedType('report', ReportPDU()) | |
| ) |