rfc1905.py 4.6 KB

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