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